जियोफ़ेंसिंग में, उपयोगकर्ता की मौजूदा जगह की जानकारी के साथ-साथ, उन जगहों की जानकारी भी मिलती है जिनमें उपयोगकर्ता की दिलचस्पी हो सकती है. अपनी दिलचस्पी की जगह को मार्क करने के लिए, उसका अक्षांश और देशांतर तय करें. जगह के आस-पास के दायरे को अडजस्ट करने के लिए, उसमें एक दायरा जोड़ें. अक्षांश, देशांतर, और दायरे से जियोफ़ेंस तय होता है. इससे दिलचस्पी की जगह के आस-पास एक गोलाकार इलाका या बाउंड्री बनती है.
एक साथ कई जियोफ़ेंस चालू किए जा सकते हैं. हालांकि, हर ऐप्लिकेशन के लिए, हर डिवाइस के उपयोगकर्ता के हिसाब से 100 जियोफ़ेंस की सीमा होती है. हर जियोफ़ेंस के लिए, जगह की जानकारी देने वाली सेवाओं से, आपको जियोफ़ेंस में आने और उससे बाहर जाने के इवेंट भेजने के लिए कहा जा सकता है. इसके अलावा, जियोफ़ेंस के दायरे में किसी इवेंट को ट्रिगर करने से पहले, रुकने या ठहरने की अवधि तय की जा सकती है. मिलीसेकंड में समयसीमा तय करके, किसी भी जियोफ़ेंस की अवधि सीमित की जा सकती है. जियोफ़ेंस की समयसीमा खत्म होने के बाद, जगह की जानकारी देने वाली सेवाएं उसे अपने-आप हटा देती हैं.
इस लेख में, जियोफ़ेंस जोड़ने और हटाने का तरीका बताया गया है. साथ ही, इसमें जियोफ़ेंस के ट्रांज़िशन को सुनने का तरीका भी बताया गया है
BroadcastReceiver.
ध्यान दें: Wear OS वाले डिवाइसों पर, जियोफ़ेंसिंग एपीआई, बैटरी का सही तरीके से इस्तेमाल नहीं करते हैं. हम Wear OS वाले डिवाइसों पर इन एपीआई का इस्तेमाल करने की सलाह नहीं देते. ज़्यादा जानकारी के लिए, बैटरी और बिजली की खपत कम करना लेख पढ़ें.
जियोफ़ेंस की निगरानी की सुविधा सेट अप करना
जियोफ़ेंस की निगरानी का अनुरोध करने के लिए, सबसे पहले ज़रूरी अनुमतियों का अनुरोध करें. जियोफ़ेंसिंग का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को इन अनुमतियों का अनुरोध करना होगा:
-
ACCESS_FINE_LOCATION -
अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन को टारगेट करता है, तो
ACCESS_BACKGROUND_LOCATION
ज़्यादा जानने के लिए, जगह की जानकारी की अनुमतियों का अनुरोध करने का तरीका देखें.
अगर आपको जियोफ़ेंस के ट्रांज़िशन को सुनने के लिए, BroadcastReceiver का इस्तेमाल करना है,
तो सेवा का नाम तय करने वाला एक एलिमेंट जोड़ें. यह एलिमेंट,
<application> एलिमेंट का चाइल्ड होना चाहिए:
<application android:allowBackup="true"> ... <receiver android:name=".GeofenceBroadcastReceiver"/> <application/>
जगह की जानकारी के एपीआई को ऐक्सेस करने के लिए, आपको जियोफ़ेंसिंग क्लाइंट का एक इंस्टेंस बनाना होगा. अपने क्लाइंट को कनेक्ट करने का तरीका जानने के लिए:
Kotlin
lateinit var geofencingClient: GeofencingClient override fun onCreate(savedInstanceState: Bundle?) { // ... geofencingClient = LocationServices.getGeofencingClient(this) }
Java
private GeofencingClient geofencingClient; @Override public void onCreate(Bundle savedInstanceState) { // ... geofencingClient = LocationServices.getGeofencingClient(this); }
जियोफ़ेंस बनाना और उन्हें जोड़ना
आपके ऐप्लिकेशन को जियोफ़ेंस बनाने और जोड़ने के लिए, जगह की जानकारी के एपीआई की बिल्डर क्लास का इस्तेमाल करना होगा. इससे जियोफ़ेंस ऑब्जेक्ट बनाए जा सकते हैं. साथ ही, उन्हें जोड़ने के लिए, सुविधा क्लास का इस्तेमाल करना होगा. इसके अलावा, जियोफ़ेंस के ट्रांज़िशन होने पर, जगह की जानकारी देने वाली सेवाओं से भेजे गए
इंटेंट को मैनेज करने के लिए,
PendingIntent तय किया जा सकता है. इसके बारे में इस सेक्शन में बताया गया है.
ध्यान दें: एक उपयोगकर्ता वाले डिवाइसों पर, हर ऐप्लिकेशन के लिए 100 जियोफ़ेंस की सीमा होती है. एक से ज़्यादा उपयोगकर्ताओं वाले डिवाइसों के लिए, हर ऐप्लिकेशन के लिए, हर डिवाइस के उपयोगकर्ता के हिसाब से 100 जियोफ़ेंस की सीमा होती है.
जियोफ़ेंस ऑब्जेक्ट बनाना
सबसे पहले, जियोफ़ेंस बनाने के लिए
Geofence.Builder का इस्तेमाल करें. साथ ही, जियोफ़ेंस के लिए, मनचाहा दायरा, अवधि, और
ट्रांज़िशन टाइप सेट करें. उदाहरण के लिए, सूची ऑब्जेक्ट को पॉप्युलेट करने के लिए:
Kotlin
geofenceList.add(Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.key) // Set the circular region of this geofence. .setCircularRegion( entry.value.latitude, entry.value.longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) // Set the expiration duration of the geofence. This geofence gets automatically // removed after this period of time. .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) // Set the transition types of interest. Alerts are only generated for these // transition. We track entry and exit transitions in this sample. .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT) // Create the geofence. .build())
Java
geofenceList.add(new Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.getKey()) .setCircularRegion( entry.getValue().latitude, entry.getValue().longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .build());
इस उदाहरण में, कॉन्स्टैंट फ़ाइल से डेटा लिया गया है. असल में, ऐप्लिकेशन, उपयोगकर्ता की जगह के आधार पर, डाइनैमिक तरीके से जियोफ़ेंस बना सकते हैं.
जियोफ़ेंस और शुरुआती ट्रिगर तय करना
यहां दिए गए स्निपेट में,
GeofencingRequest क्लास और उसकी नेस्ट की गई
GeofencingRequestBuilder क्लास का इस्तेमाल किया गया है. इससे, निगरानी के लिए जियोफ़ेंस तय किए जा सकते हैं. साथ ही, यह सेट किया जा सकता है कि जियोफ़ेंस से जुड़े इवेंट कैसे ट्रिगर हों:
Kotlin
private fun getGeofencingRequest(): GeofencingRequest { return GeofencingRequest.Builder().apply { setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER) addGeofences(geofenceList) }.build() }
Java
private GeofencingRequest getGeofencingRequest() { GeofencingRequest.Builder builder = new GeofencingRequest.Builder(); builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER); builder.addGeofences(geofenceList); return builder.build(); }
इस उदाहरण में, जियोफ़ेंस के दो ट्रिगर का इस्तेमाल दिखाया गया है.
GEOFENCE_TRANSITION_ENTER
ट्रांज़िशन तब ट्रिगर होता है, जब कोई डिवाइस जियोफ़ेंस के दायरे में आता है. वहीं,
GEOFENCE_TRANSITION_EXIT
ट्रांज़िशन तब ट्रिगर होता है, जब कोई डिवाइस जियोफ़ेंस के दायरे से बाहर जाता है. Specifying
INITIAL_TRIGGER_ENTER तय करने से, जगह की जानकारी देने वाली सेवाओं को यह पता चलता है कि
GEOFENCE_TRANSITION_ENTER
को ट्रिगर किया जाना चाहिए अगर डिवाइस पहले से ही जियोफ़ेंस के दायरे में है.
कई मामलों में,
INITIAL_TRIGGER_DWELL,
का इस्तेमाल करना बेहतर हो सकता है. यह सिर्फ़ तब इवेंट ट्रिगर करता है, जब उपयोगकर्ता किसी जियोफ़ेंस के दायरे में तय अवधि के लिए रुकता है.
इस तरीके से, "चेतावनी वाले स्पैम" को कम किया जा सकता है. ऐसा तब होता है, जब कोई
डिवाइस कुछ समय के लिए जियोफ़ेंस के दायरे में आता है और फिर बाहर जाता है, तो कई सूचनाएं मिलती हैं. जियोफ़ेंस से बेहतर नतीजे पाने के लिए, एक और रणनीति अपनाई जा सकती है. इसके तहत, कम से कम 100 मीटर का दायरा सेट किया जा सकता है. इससे, आम तौर पर वाई-फ़ाई नेटवर्क की जगह की सटीक जानकारी का पता लगाने में मदद मिलती है
. साथ ही, डिवाइस की बैटरी की खपत कम करने में भी मदद मिलती है.
जियोफ़ेंस के ट्रांज़िशन के लिए ब्रॉडकास्ट रिसीवर तय करना
जगह की जानकारी देने वाली सेवाओं से भेजा गया Intent, आपके ऐप्लिकेशन में अलग-अलग कार्रवाइयां ट्रिगर कर सकता है. हालांकि, इससे कोई गतिविधि या फ़्रैगमेंट शुरू नहीं होना चाहिए, क्योंकि कॉम्पोनेंट सिर्फ़ उपयोगकर्ता की कार्रवाई के जवाब में दिखने चाहिए. कई मामलों में, जियोफ़ेंस के ट्रांज़िशन को मैनेज करने के लिए, BroadcastReceiver एक अच्छा तरीका है. A
BroadcastReceiver को तब अपडेट मिलते हैं, जब कोई इवेंट होता है. जैसे, जियोफ़ेंस के दायरे में आना या उससे बाहर जाना. साथ ही, यह बैकग्राउंड में लंबे समय तक चलने वाला काम शुरू कर सकता है.
यहां दिए गए स्निपेट में, PendingIntent तय करने का तरीका बताया गया है. इससे BroadcastReceiver शुरू होता है:
Kotlin
class MainActivity : AppCompatActivity() { // ... private val geofencePendingIntent: PendingIntent by lazy { // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling // addGeofences() and removeGeofences(). val flags = PendingIntent.FLAG_UPDATE_CURRENT if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { // Starting on Android S+ the pending intent has to be mutable. flags or PendingIntent.FLAG_MUTABLE } val intent = Intent(this, GeofenceBroadcastReceiver::class.java) PendingIntent.getBroadcast(this, 0, intent, flags) } }
Java
public class MainActivity extends AppCompatActivity { // ... private PendingIntent getGeofencePendingIntent() { // Reuse the PendingIntent if we already have it. if (geofencePendingIntent != null) { return geofencePendingIntent; } // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling // addGeofences() and removeGeofences(). int flags = PendingIntent.FLAG_UPDATE_CURRENT; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { // Starting on Android S+ the pending intent has to be mutable. flags |= PendingIntent.FLAG_MUTABLE; } Intent intent = new Intent(this, GeofenceBroadcastReceiver.class); geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, flags); return geofencePendingIntent; } }
जियोफ़ेंस जोड़ना
जियोफ़ेंस जोड़ने के लिए,
तरीके का इस्तेमाल करें.
GeofencingClient.addGeofences()
GeofencingRequest ऑब्जेक्ट और PendingIntent की जानकारी दें.
यहां दिए गए स्निपेट में, नतीजों को प्रोसेस करने का तरीका दिखाया गया है:
Kotlin
geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run { addOnSuccessListener { // Geofences added // ... } addOnFailureListener { // Failed to add geofences // ... } }
Java
geofencingClient.addGeofences(getGeofencingRequest(), getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences added // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to add geofences // ... } });
जियोफ़ेंस के ट्रांज़िशन को मैनेज करना
जब जगह की जानकारी देने वाली सेवाओं को यह पता चलता है कि उपयोगकर्ता किसी जियोफ़ेंस के दायरे में आया है या उससे बाहर गया है, तो वह
Intent में मौजूद PendingIntent
भेजती है. यह जियोफ़ेंस जोड़ने के अनुरोध में शामिल होता है.
जैसे ब्रॉडकास्ट रिसीवर को यह पता चलता है कि Intent को लागू किया गया है. इसके बाद, वह इंटेंट से जियोफ़ेंसिंग इवेंट हासिल कर सकता है. साथ ही, जियोफ़ेंस के ट्रांज़िशन के टाइप तय कर सकता है और यह तय कर सकता है कि तय किए गए किन जियोफ़ेंस को ट्रिगर किया गया है.GeofenceBroadcastReceiver ब्रॉडकास्ट
रिसीवर, किसी ऐप्लिकेशन को बैकग्राउंड में काम करने का निर्देश दे सकता है. इसके अलावा, अगर
चाहें, तो आउटपुट के तौर पर सूचना भेज सकता है.
ध्यान दें: Android 8.0 (एपीआई लेवल 26) और इसके बाद के वर्शन पर, अगर कोई ऐप्लिकेशन जियोफ़ेंस की निगरानी करते समय बैकग्राउंड में चल रहा है, तो डिवाइस हर कुछ मिनट में जियोफ़ेंसिंग इवेंट का जवाब देता है. जवाब देने की इन सीमाओं के हिसाब से अपने ऐप्लिकेशन को अडजस्ट करने का तरीका जानने के लिए, बैकग्राउंड में जगह की जानकारी की सीमाएं देखें.
यहां दिए गए स्निपेट में,
BroadcastReceiver
तय करने का तरीका बताया गया है. इससे जियोफ़ेंस का ट्रांज़िशन होने पर, सूचना पोस्ट की जाती है. जब उपयोगकर्ता
सूचना पर क्लिक करता है, तो ऐप्लिकेशन की मुख्य गतिविधि दिखती है:
Kotlin
class GeofenceBroadcastReceiver : BroadcastReceiver() { // ... override fun onReceive(context: Context?, intent: Intent?) { val geofencingEvent = GeofencingEvent.fromIntent(intent) if (geofencingEvent.hasError()) { val errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.errorCode) Log.e(TAG, errorMessage) return } // Get the transition type. val geofenceTransition = geofencingEvent.geofenceTransition // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. val triggeringGeofences = geofencingEvent.triggeringGeofences // Get the transition details as a String. val geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ) // Send notification and log the transition details. sendNotification(geofenceTransitionDetails) Log.i(TAG, geofenceTransitionDetails) } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)) } } }
Java
public class GeofenceBroadcastReceiver extends BroadcastReceiver { // ... protected void onReceive(Context context, Intent intent) { GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent); if (geofencingEvent.hasError()) { String errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.getErrorCode()); Log.e(TAG, errorMessage); return; } // Get the transition type. int geofenceTransition = geofencingEvent.getGeofenceTransition(); // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences(); // Get the transition details as a String. String geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ); // Send notification and log the transition details. sendNotification(geofenceTransitionDetails); Log.i(TAG, geofenceTransitionDetails); } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)); } } }
PendingIntent के ज़रिए ट्रांज़िशन इवेंट का पता लगाने के बाद, BroadcastReceiver को जियोफ़ेंस के ट्रांज़िशन का टाइप मिलता है. इसके बाद, वह यह टेस्ट करता है कि यह उन इवेंट में से एक है या नहीं जिनका इस्तेमाल ऐप्लिकेशन, सूचनाएं ट्रिगर करने के लिए करता है. इस मामले में, ये इवेंट GEOFENCE_TRANSITION_ENTER या GEOFENCE_TRANSITION_EXIT हैं. इसके बाद, सेवा एक सूचना भेजती है और ट्रांज़िशन की जानकारी लॉग करती है.
जियोफ़ेंस की निगरानी की सुविधा बंद करना
अगर जियोफ़ेंस की निगरानी की ज़रूरत नहीं है या अब इसकी ज़रूरत नहीं है, तो इसे बंद करने से डिवाइस की बैटरी
पावर और सीपीयू साइकल को बचाया जा सकता है. जियोफ़ेंस की निगरानी की सुविधा, मुख्य गतिविधि में बंद की जा सकती है.
इसका इस्तेमाल जियोफ़ेंस जोड़ने और हटाने के लिए किया जाता है. जियोफ़ेंस हटाने पर, यह सुविधा तुरंत बंद हो जाती है.
एपीआई, जियोफ़ेंस को हटाने के तरीके उपलब्ध कराता है. इसके लिए, अनुरोध आईडी या किसी दिए गए
PendingIntent से जुड़े जियोफ़ेंस को हटाया जा सकता है.
यहां दिए गए स्निपेट में, PendingIntent के ज़रिए जियोफ़ेंस हटाने का तरीका बताया गया है. इससे, डिवाइस के पहले से जोड़े गए जियोफ़ेंस के दायरे में आने या उससे बाहर जाने पर, आगे की सभी सूचनाएं बंद हो जाती हैं:
Kotlin
geofencingClient?.removeGeofences(geofencePendingIntent)?.run { addOnSuccessListener { // Geofences removed // ... } addOnFailureListener { // Failed to remove geofences // ... } }
Java
geofencingClient.removeGeofences(getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences removed // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to remove geofences // ... } });
जियोफ़ेंसिंग को, जगह की जानकारी के आधार पर काम करने वाली अन्य सुविधाओं के साथ जोड़ा जा सकता है. जैसे, समय-समय पर जगह की जानकारी के अपडेट. ज़्यादा जानकारी के लिए, इस क्लास में मौजूद अन्य लेख देखें.
जियोफ़ेंसिंग के लिए सबसे सही तरीके इस्तेमाल करना
इस सेक्शन में, Android के लिए जगह की जानकारी के एपीआई के साथ जियोफ़ेंसिंग का इस्तेमाल करने के बारे में सुझाव दिए गए हैं.
बैटरी की खपत कम करना
जियोफ़ेंसिंग का इस्तेमाल करने वाले अपने ऐप्लिकेशन में, बैटरी की खपत को ऑप्टिमाइज़ करने के लिए, इन तकनीकों का इस्तेमाल किया जा सकता है:
सूचना की रिस्पॉन्सिवनेस को ज़्यादा वैल्यू पर सेट करें. ऐसा करने से, जियोफ़ेंस की चेतावनियों की लेटेंसी बढ़ाकर, बैटरी की खपत को बेहतर बनाया जा सकता है. उदाहरण के लिए, अगर रिस्पॉन्सिवनेस की वैल्यू पांच मिनट सेट की जाती है, तो आपका ऐप्लिकेशन हर पांच मिनट में सिर्फ़ एक बार, दायरे में आने या उससे बाहर जाने की चेतावनी की जांच करता है. कम वैल्यू सेट करने का मतलब यह नहीं है कि उपयोगकर्ताओं को उस समयसीमा के अंदर सूचनाएं मिलेंगी. उदाहरण के लिए, अगर पांच सेकंड की वैल्यू सेट की जाती है, तो चेतावनी मिलने में इससे ज़्यादा समय लग सकता है.
उन जगहों के लिए, जियोफ़ेंस का बड़ा दायरा इस्तेमाल करें जहां उपयोगकर्ता ज़्यादा समय बिताता है. जैसे, घर या ऑफ़िस. बड़े दायरे से, बैटरी की खपत सीधे तौर पर कम नहीं होती. हालांकि, इससे ऐप्लिकेशन के दायरे में आने या उससे बाहर जाने की जांच करने की फ़्रीक्वेंसी कम हो जाती है. इससे, बैटरी की कुल खपत कम हो जाती है.
अपने जियोफ़ेंस के लिए सही दायरा चुनना
बेहतर नतीजे पाने के लिए, जियोफ़ेंस का कम से कम दायरा 100 से 150 मीटर के बीच सेट किया जाना चाहिए. वाई-फ़ाई उपलब्ध होने पर, जगह की सटीक जानकारी आम तौर पर 20 से 50 मीटर के बीच होती है. इनडोर जगह की जानकारी उपलब्ध होने पर, सटीक जानकारी की रेंज पांच मीटर तक हो सकती है. जब तक आपको यह न पता हो कि जियोफ़ेंस के अंदर इनडोर जगह की जानकारी उपलब्ध है, तब तक यह मान लें कि वाई-फ़ाई की जगह की सटीक जानकारी करीब 50 मीटर है.
जब वाई-फ़ाई की जगह की जानकारी उपलब्ध नहीं होती है, तब जगह की सटीक जानकारी कम हो जाती है. उदाहरण के लिए, ग्रामीण इलाकों में गाड़ी चलाते समय. सटीक जानकारी की रेंज, कुछ सौ मीटर से लेकर कई किलोमीटर तक हो सकती है. ऐसे मामलों में, आपको बड़े दायरे का इस्तेमाल करके जियोफ़ेंस बनाने चाहिए.
उपयोगकर्ताओं को यह बताना कि आपका ऐप्लिकेशन जियोफ़ेंसिंग का इस्तेमाल क्यों करता है
जियोफ़ेंसिंग का इस्तेमाल करने पर, आपका ऐप्लिकेशन बैकग्राउंड में जगह की जानकारी ऐक्सेस करता है. इसलिए, यह सोचें कि आपका ऐप्लिकेशन, उपयोगकर्ताओं को क्या फ़ायदे देता है. उन्हें साफ़ तौर पर बताएं कि आपके ऐप्लिकेशन को इस ऐक्सेस की ज़रूरत क्यों है, ताकि उपयोगकर्ताओं को इस बारे में ज़्यादा जानकारी मिल सके और पारदर्शिता बनी रहे.
जगह की जानकारी के ऐक्सेस से जुड़े सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, निजता के सबसे सही तरीके वालापेज देखें. इसमें जियोफ़ेंसिंग के बारे में भी जानकारी दी गई है.
चेतावनी वाले स्पैम को कम करने के लिए, ठहरने के ट्रांज़िशन टाइप का इस्तेमाल करना
अगर किसी जियोफ़ेंस के पास से कुछ समय के लिए गाड़ी चलाने पर, आपको कई चेतावनियां मिलती हैं, तो चेतावनियों को कम करने का सबसे अच्छा तरीका है कि
GEOFENCE_TRANSITION_ENTER के बजाय,
GEOFENCE_TRANSITION_DWELL ट्रांज़िशन टाइप का इस्तेमाल किया जाए. इस तरह, ठहरने की चेतावनी सिर्फ़ तब भेजी जाती है, जब उपयोगकर्ता किसी जियोफ़ेंस के दायरे में तय समय के लिए रुकता है. ठहरने में लगने वाला समय सेट करके, अवधि चुनी जा सकती है
.
जियोफ़ेंस को सिर्फ़ तब फिर से रजिस्टर करें, जब इसकी ज़रूरत हो
रजिस्टर किए गए जियोफ़ेंस, com.google.process.location प्रोसेस में रखे जाते हैं. इसका मालिकाना हक com.google.android.gms पैकेज के पास होता है.
इन इवेंट को मैनेज करने के लिए, ऐप्लिकेशन को कुछ करने की ज़रूरत नहीं होती, क्योंकि सिस्टम इन इवेंट के बाद जियोफ़ेंस को वापस लाता है:
- Google Play services को अपग्रेड किया गया है.
- संसाधन की पाबंदी की वजह से, Google Play services को सिस्टम ने बंद करके फिर से चालू किया है.
- जगह की जानकारी की प्रोसेस क्रैश हो गई है.
अगर इन इवेंट के बाद भी जियोफ़ेंस की ज़रूरत है, तो ऐप्लिकेशन को उन्हें फिर से रजिस्टर करना होगा, क्योंकि सिस्टम इन मामलों में जियोफ़ेंस को वापस नहीं ला सकता:
- डिवाइस को रीबूट किया गया है. ऐप्लिकेशन को डिवाइस के बूट होने की कार्रवाई को सुनना चाहिए. इसके बाद, ज़रूरी जियोफ़ेंस को फिर से रजिस्टर करना चाहिए.
- ऐप्लिकेशन को अनइंस्टॉल करके फिर से इंस्टॉल किया गया है.
- ऐप्लिकेशन का डेटा मिटाया गया है.
- Google Play services का डेटा मिटाया गया है.
- ऐप्लिकेशन को
GEOFENCE_NOT_AVAILABLEकी चेतावनी मिली है. आम तौर पर, ऐसा तब होता है, जब एनएलपी (Android का नेटवर्क लोकेशन प्रोवाइडर) बंद कर दिया जाता है.
जियोफ़ेंस के दायरे में आने के इवेंट की समस्या हल करना
अगर डिवाइस के जियोफ़ेंस के दायरे में आने पर, जियोफ़ेंस ट्रिगर नहीं हो रहे हैं
(यानी,
GEOFENCE_TRANSITION_ENTER की चेतावनी ट्रिगर नहीं हो रही है), तो सबसे पहले यह पक्का करें कि आपके जियोफ़ेंस सही तरीके से रजिस्टर किए गए हों
. इसके बारे में इस गाइड में बताया गया है.
चेतावनियों के उम्मीद के मुताबिक काम न करने की कुछ वजहें यहां दी गई हैं:
- आपके जियोफ़ेंस के दायरे में जगह की सटीक जानकारी उपलब्ध नहीं है या आपका जियोफ़ेंस बहुत छोटा है. ज़्यादातर डिवाइसों पर, जियोफ़ेंस सेवा, जियोफ़ेंस को ट्रिगर करने के लिए सिर्फ़ नेटवर्क की जगह की जानकारी का इस्तेमाल करती है. सेवा इस तरीके का इस्तेमाल इसलिए करती है, क्योंकि नेटवर्क की जगह की जानकारी में बहुत कम बैटरी खर्च होती है, अलग-अलग जगहों की जानकारी पाने में कम समय लगता है, और सबसे अहम बात यह है कि यह इनडोर भी उपलब्ध होती है.
डिवाइस पर वाई-फ़ाई बंद है. वाई-फ़ाई चालू होने से, जगह की सटीक जानकारी में काफ़ी सुधार हो सकता है. इसलिए, अगर वाई-फ़ाई बंद है, तो हो सकता है कि आपके ऐप्लिकेशन को जियोफ़ेंस की चेतावनियां न मिलें. यह कई सेटिंग पर निर्भर करता है. जैसे, जियोफ़ेंस का दायरा, डिवाइस का मॉडल या Android का वर्शन. Android 4.3 (एपीआई लेवल 18) से, हमने “सिर्फ़ वाई-फ़ाई स्कैन मोड” की सुविधा जोड़ी है. इससे उपयोगकर्ता वाई-फ़ाई को बंद कर सकते हैं, लेकिन फिर भी उन्हें नेटवर्क की अच्छी जगह की जानकारी मिलती है. यह एक अच्छा तरीका है कि उपयोगकर्ता को प्रॉम्प्ट किया जाए और उसे वाई-फ़ाई या सिर्फ़ वाई-फ़ाई स्कैन मोड चालू करने के लिए शॉर्टकट दिया जाए. ऐसा तब किया जाना चाहिए, जब दोनों बंद हों. SettingsClient का इस्तेमाल करके, यह पक्का करें कि डिवाइस की सिस्टम सेटिंग, जगह की सटीक जानकारी का पता लगाने के लिए सही तरीके से कॉन्फ़िगर की गई हों.
ध्यान दें: अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन को टारगेट करता है, तो
WifiManager.setEnabled()को सीधे तौर पर कॉल नहीं किया जा सकता. हालांकि, अगर आपका ऐप्लिकेशन, सिस्टम ऐप्लिकेशन या डिवाइस पॉलिसी कंट्रोलर (डीपीसी) है, तो ऐसा किया जा सकता है. इसके बजाय, सेटिंग पैनल का इस्तेमाल करें.- आपके जियोफ़ेंस के दायरे में, भरोसेमंद नेटवर्क कनेक्टिविटी नहीं है. अगर भरोसेमंद डेटा कनेक्शन नहीं है, तो चेतावनियां जनरेट नहीं हो सकती हैं. ऐसा इसलिए है, क्योंकि जियोफ़ेंस सेवा, नेटवर्क लोकेशन प्रोवाइडर पर निर्भर करती है. इसके लिए, डेटा कनेक्शन की ज़रूरत होती है.
- चेतावनियां मिलने में देरी हो सकती है. जियोफ़ेंस सेवा, जगह की जानकारी के लिए लगातार क्वेरी नहीं करती है. इसलिए, चेतावनियां मिलने में कुछ लेटेंसी हो सकती है. आम तौर पर, लेटेंसी दो मिनट से कम होती है. डिवाइस के चलने पर, यह और भी कम हो जाती है. अगर बैकग्राउंड में जगह की जानकारी की सीमाएं लागू हैं, तो लेटेंसी औसतन दो से तीन मिनट होती है. अगर डिवाइस लंबे समय तक एक ही जगह पर रहा है, तो लेटेंसी बढ़ सकती है (छह मिनट तक).
अन्य संसाधन
जियोफ़ेंसिंग के बारे में ज़्यादा जानने के लिए, यह लेख पढ़ें:
सैंपल
जियोफ़ेंस बनाने और उनकी निगरानी करने के लिए सैंपल ऐप्लिकेशन.