जियोफ़ेंसिंग, उपयोगकर्ता की मौजूदा जगह की जानकारी को उपयोगकर्ता की दिलचस्पी वाली जगहों के आस-पास की जानकारी के साथ जोड़ती है. दिलचस्पी वाले इलाके को मार्क करने के लिए, उसके अक्षांश और देशांतर की जानकारी दें. जगह की जानकारी के लिए, नज़दीकी को अडजस्ट करने के लिए, दायरा जोड़ें. अक्षांश, देशांतर, और दायरा, जियोफ़ेंस को तय करते हैं. इससे दिलचस्पी वाले इलाके के आस-पास एक गोलाकार इलाका या फ़ेंस बनता है.
एक से ज़्यादा जियोफ़ेंस चालू किए जा सकते हैं. हालांकि, हर ऐप्लिकेशन और डिवाइस के हर उपयोगकर्ता के लिए, ज़्यादा से ज़्यादा 100 जियोफ़ेंस चालू किए जा सकते हैं. हर जियोफ़ेंस के लिए, जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवाओं से, जियोफ़ेंस में जाने और उससे बाहर निकलने के इवेंट भेजने के लिए कहा जा सकता है. इसके अलावा, किसी इवेंट को ट्रिगर करने से पहले, जियोफ़ेंस वाले इलाके में इंतज़ार करने या रुकने की अवधि तय की जा सकती है. किसी भी जियोफ़ेंस की अवधि को सीमित किया जा सकता है. इसके लिए, मिलीसेकंड में समयसीमा तय करें. जियोफ़ेंस की समयसीमा खत्म होने के बाद, जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवाएं इसे अपने-आप हटा देती हैं.
इस लेसन में, जियोफ़ेंस जोड़ने और हटाने का तरीका बताया गया है. साथ ही, BroadcastReceiver का इस्तेमाल करके, जियोफ़ेंस ट्रांज़िशन को सुनने का तरीका भी बताया गया है.
ध्यान दें: Wear डिवाइसों पर, Geofencing API बैटरी का बेहतर तरीके से इस्तेमाल नहीं करते. हम Wear पर इन एपीआई का इस्तेमाल करने का सुझाव नहीं देते. ज़्यादा जानकारी के लिए, पावर और बैटरी बचाना लेख पढ़ें.
जियोफ़ेंस मॉनिटरिंग के लिए सेट अप करना
जियोफ़ेंस मॉनिटरिंग का अनुरोध करने के लिए, सबसे पहले ज़रूरी अनुमतियों का अनुरोध करना होगा. जियोफ़ेंसिंग का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को इन अनुमतियों का अनुरोध करना होगा:
-
ACCESS_FINE_LOCATION -
ACCESS_BACKGROUND_LOCATIONअगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन को टारगेट करता है
ज़्यादा जानने के लिए, जगह की जानकारी की अनुमतियों का अनुरोध करने के तरीके से जुड़ी गाइड देखें.
अगर आपको जियोफ़ेंस ट्रांज़िशन सुनने के लिए 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
ट्रांज़िशन ट्रिगर होता है.
INITIAL_TRIGGER_ENTER को तय करने से, जगह की जानकारी की सुविधा को पता चलता है कि अगर डिवाइस पहले से ही जियोफ़ेंस के अंदर है, तो
GEOFENCE_TRANSITION_ENTER को ट्रिगर किया जाना चाहिए.
कई मामलों में,
INITIAL_TRIGGER_DWELL का इस्तेमाल करना बेहतर हो सकता है. यह इवेंट को सिर्फ़ तब ट्रिगर करता है, जब उपयोगकर्ता किसी जियोफ़ेंस में तय की गई अवधि के लिए रुकता है.
इस तरीके से, "स्पैम सूचनाओं" को कम करने में मदद मिल सकती है. ये सूचनाएं तब मिलती हैं, जब कोई डिवाइस कुछ समय के लिए जियोफ़ेंस में आता है और फिर बाहर निकल जाता है. जियोफ़ेंस से सबसे अच्छे नतीजे पाने की एक और रणनीति यह है कि कम से कम 100 मीटर का दायरा सेट करें. इससे, सामान्य वाई-फ़ाई नेटवर्क की जगह की सटीक जानकारी का पता लगाने में मदद मिलती है. साथ ही, डिवाइस की बैटरी की खपत कम होती है.
जियोफ़ेंस ट्रांज़िशन के लिए ब्रॉडकास्ट रिसीवर तय करना
जगह की जानकारी की सेवाओं से भेजा गया Intent, आपके ऐप्लिकेशन में अलग-अलग कार्रवाइयां ट्रिगर कर सकता है. हालांकि, आपको इससे कोई गतिविधि या फ़्रैगमेंट शुरू नहीं करना चाहिए, क्योंकि कॉम्पोनेंट सिर्फ़ उपयोगकर्ता की कार्रवाई के जवाब में दिखने चाहिए. कई मामलों में, जियोफ़ेंस ट्रांज़िशन को मैनेज करने के लिए BroadcastReceiver एक अच्छा तरीका है. BroadcastReceiver को कोई इवेंट होने पर अपडेट मिलते हैं. जैसे, जियोफ़ेंस में जाने या उससे बाहर निकलने पर. साथ ही, यह बैकग्राउंड में लंबे समय तक चलने वाला काम शुरू कर सकता है.
यहां दिए गए स्निपेट में, BroadcastReceiver शुरू करने वाले PendingIntent को तय करने का तरीका बताया गया है:
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 // ... } });
जियोफ़ेंस ट्रांज़िशन मैनेज करना
जब जगह की जानकारी का डेटा इस्तेमाल करने वाली सेवा को पता चलता है कि उपयोगकर्ता ने जियोफ़ेंस में एंट्री की है या उससे बाहर निकला है, तो वह PendingIntent में मौजूद Intent भेजती है. इसे आपने जियोफ़ेंस जोड़ने के अनुरोध में शामिल किया था. GeofenceBroadcastReceiver जैसा ब्रॉडकास्ट रिसीवर, यह नोटिस करता है कि Intent को शुरू किया गया था. इसके बाद, वह इंटेंट से जियोफ़ेंसिंग इवेंट की जानकारी हासिल कर सकता है. साथ ही, जियोफ़ेंस ट्रांज़िशन के टाइप का पता लगा सकता है और यह तय कर सकता है कि तय किए गए जियोफ़ेंस में से कौनसा ट्रिगर हुआ. ब्रॉडकास्ट रिसीवर, किसी ऐप्लिकेशन को बैकग्राउंड में काम शुरू करने के लिए निर्देश दे सकता है. इसके अलावा, अगर ज़रूरी हो, तो आउटपुट के तौर पर सूचना भेज सकता है.
ध्यान दें: 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()को सीधे तौर पर कॉल नहीं किया जा सकता. ऐसा तब तक नहीं किया जा सकता, जब तक आपका ऐप्लिकेशन कोई सिस्टम ऐप्लिकेशन या डिवाइस से जुड़ी नीति कंट्रोलर (डीपीसी) न हो. इसके बजाय, सेटिंग पैनल का इस्तेमाल करें.- आपके जियोफ़ेंस में कोई भरोसेमंद नेटवर्क कनेक्टिविटी नहीं है. अगर डेटा कनेक्शन भरोसेमंद नहीं है, तो हो सकता है कि सूचनाएं जनरेट न हों. ऐसा इसलिए होता है, क्योंकि जियोफ़ेंस सेवा, नेटवर्क की जगह की जानकारी देने वाली सेवा पर निर्भर करती है. इसके लिए, डेटा कनेक्शन की ज़रूरत होती है.
- सूचनाएं मिलने में देरी हो सकती है. जियोफ़ेंस सेवा, जगह की जानकारी के लिए लगातार क्वेरी नहीं करती है. इसलिए, सूचनाएं मिलने में कुछ देरी हो सकती है. आम तौर पर, इंतज़ार का समय दो मिनट से कम होता है. डिवाइस के मूव होने पर, यह समय और भी कम होता है. अगर बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की सीमाएं लागू हैं, तो इंतज़ार का समय औसतन दो से तीन मिनट होता है. अगर डिवाइस काफ़ी समय से एक ही जगह पर है, तो इंतज़ार का समय बढ़ सकता है (ज़्यादा से ज़्यादा छह मिनट).
अन्य संसाधन
जियोफ़ेंसिंग के बारे में ज़्यादा जानने के लिए, ये लेख पढ़ें:
सैंपल
सैंपल के तौर पर मिला ऐप्लिकेशन, जिसका इस्तेमाल जियोफ़ेंस बनाने और उन्हें मॉनिटर करने के लिए किया जाता है.