जियोफ़ेंसिंग की सुविधा, उपयोगकर्ता की मौजूदा जगह की जानकारी के साथ-साथ, उपयोगकर्ता के आस-पास की उन जगहों की जानकारी भी देती है जो उपयोगकर्ता के लिए काम की हो सकती हैं. किसी दिलचस्प जगह को मार्क करने के लिए, आपको उसका अक्षांश और देशांतर बताना होगा. लोकेशन के साथ एक दायरा जोड़ते हैं. अक्षांश, देशांतर, और दायरा जियोफ़ेंस को परिभाषित करते हैं. इससे दिलचस्पी वाली जगह के आस-पास का गोलाकार क्षेत्र या बाड़.
आपके पास एक से ज़्यादा चालू जियोफ़ेंस हो सकते हैं. हालांकि, हर ऐप्लिकेशन के लिए, हर डिवाइस के उपयोगकर्ता के लिए, ज़्यादा से ज़्यादा 100 जियोफ़ेंस इस्तेमाल किए जा सकते हैं. हर जियोफ़ेंस के लिए, Location Services से आपको एंट्रेंस और एक्ज़िट इवेंट भेजने के लिए कहा जा सकता है. इसके अलावा, किसी इवेंट को ट्रिगर करने से पहले, जियोफ़ेंस के अंदर इंतज़ार करने या रहने के लिए, समय भी तय किया जा सकता है. आपने लोगों तक पहुंचाया मुफ़्त में मिलीसेकंड में, खत्म होने की अवधि बताकर किसी भी जियोफ़ेंस की अवधि को सीमित कर सकता है. जियोफ़ेंस की समयसीमा खत्म होने के बाद, जगह की जानकारी देने वाली सेवाएं उसे अपने-आप हटा देती हैं.

इस लेख में, जियोफ़ेंस जोड़ने और हटाने का तरीका बताया गया है. साथ ही, BroadcastReceiver
का इस्तेमाल करके, जियोफ़ेंस ट्रांज़िशन को सुनने का तरीका भी बताया गया है.
ध्यान दें: Wear डिवाइसों पर, जियोफ़ेंसिंग एपीआई, पावर. हमारा सुझाव है कि Wear पर इन एपीआई का इस्तेमाल न करें. ज़्यादा जानकारी के लिए, पावर और बैटरी बचाना लेख पढ़ें.
जियोफ़ेंस की निगरानी के लिए सेट अप करना
जियोफ़ेंस की निगरानी का अनुरोध करने के लिए, सबसे पहले ज़रूरी अनुमतियों का अनुरोध करना होगा. जियोफ़ेंसिंग का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को इनके लिए अनुरोध करना होगा:
-
ACCESS_FINE_LOCATION
-
ACCESS_BACKGROUND_LOCATION
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या उसके बाद वाले वर्शन को टारगेट करता है
ज़्यादा जानने के लिए, जगह की जानकारी की अनुमतियों के लिए अनुरोध करने का तरीका बताने वाली गाइड देखें.
अगर जियोफ़ेंस ट्रांज़िशन को सुनने के लिए BroadcastReceiver
का इस्तेमाल करना है,
सेवा के नाम के बारे में बताने वाला एलिमेंट जोड़ें. यह एलिमेंट,
<application>
एलिमेंट का चाइल्ड होना चाहिए:
<application android:allowBackup="true"> ... <receiver android:name=".GeofenceBroadcastReceiver"/> <application/>
जगह की जानकारी वाले एपीआई ऐक्सेस करने के लिए, आपको जियोफ़ेंसिंग क्लाइंट का एक इंस्टेंस बनाना होगा. अपने क्लाइंट को कनेक्ट करने का तरीका जानने के लिए:
lateinit var geofencingClient: GeofencingClient override fun onCreate(savedInstanceState: Bundle?) { // ... geofencingClient = LocationServices.getGeofencingClient(this) }
private GeofencingClient geofencingClient; @Override public void onCreate(Bundle savedInstanceState) { // ... geofencingClient = LocationServices.getGeofencingClient(this); }
जियोफ़ेंस बनाना और जोड़ना
आपके ऐप्लिकेशन को जगह की जानकारी के एपीआई की बिल्डर क्लास का इस्तेमाल करके, जियोफ़ेंस ऑब्जेक्ट बनाने और उन्हें जोड़ने की ज़रूरत होती है. साथ ही, जियोफ़ेंस ट्रांज़िशन होने पर, Location Services से भेजे गए इंटेंट को मैनेज करने के लिए, इस सेक्शन में दिखाए गए तरीके से PendingIntent
तय किया जा सकता है.
ध्यान दें: एक उपयोगकर्ता वाले डिवाइसों पर, हर ऐप्लिकेशन के लिए ज़्यादा से ज़्यादा 100 जियोफ़ेंस बनाए जा सकते हैं. कई उपयोगकर्ताओं वाले डिवाइसों के लिए, हर ऐप्लिकेशन के हर उपयोगकर्ता के लिए यह सीमा 100 जियोफ़ेंस है.
जियोफ़ेंस ऑब्जेक्ट बनाना
सबसे पहले,
Geofence.Builder
का इस्तेमाल करके जियोफ़ेंस बनाएं. इसके लिए, अपनी पसंद का दायरा, अवधि, और
जियोफ़ेंस के लिए ट्रांज़िशन टाइप. उदाहरण के लिए, किसी सूची ऑब्जेक्ट को पॉप्युलेट करने के लिए:
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())
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
क्लास को
मॉनिटर करने और यह सेट करने के लिए कि मिलते-जुलते जियोफ़ेंस इवेंट कैसे ट्रिगर हों, जियोफ़ेंस तय करें:
private fun getGeofencingRequest(): GeofencingRequest { return GeofencingRequest.Builder().apply { setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER) addGeofences(geofenceList) }.build() }
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
की वैल्यू तय करने पर, Location services को यह जानकारी मिलती है कि अगर डिवाइस पहले से ही जियोफ़ेंस में है, तो
GEOFENCE_TRANSITION_ENTER
को ट्रिगर किया जाना चाहिए.
कई मामलों में, इसके बजाय
INITIAL_TRIGGER_DWELL
,
यह इवेंट को सिर्फ़ तब ट्रिगर करता है, जब उपयोगकर्ता किसी जियोफ़ेंस में तय समय के लिए रुकता है.
इस तरीके से, "स्पैम की चेतावनी" को कम किया जा सकता है बड़ी संख्या में मिलने वाली सूचनाओं की वजह से,
डिवाइस थोड़ी देर के लिए जियोफ़ेंस में शामिल होता और उससे बाहर निकल जाता है. अपने विज्ञापनों से सबसे अच्छे नतीजे पाने के लिए एक और रणनीति
जियोफ़ेंस का मतलब है, कम से कम 100 मीटर का दायरा सेट करना. इससे, सामान्य वाई-फ़ाई नेटवर्क की जगह की जानकारी को ज़्यादा सटीक बनाने में मदद मिलती है. साथ ही, डिवाइस की बैटरी खर्च होने की दर को कम करने में भी मदद मिलती है.
जियोफ़ेंस ट्रांज़िशन के लिए ब्रॉडकास्ट रिसीवर तय करें
जगह की जानकारी से भेजा गया Intent
, इनमें अलग-अलग कार्रवाइयों को ट्रिगर कर सकता है
नहीं करना चाहिए, लेकिन आपको गतिविधि या फ़्रैगमेंट शुरू नहीं करना चाहिए, क्योंकि कॉम्पोनेंट
सिर्फ़ उपयोगकर्ता की कार्रवाई के जवाब में दिखना चाहिए. कई मामलों में, BroadcastReceiver
, जियोफ़ेंस ट्रांज़िशन को मैनेज करने का एक अच्छा तरीका है. ऐप्लिकेशन
कोई इवेंट होने पर BroadcastReceiver
को अपडेट मिलते हैं, जैसे कि
जियोफ़ेंस में बदलें या उससे बाहर निकलें. साथ ही, लंबे समय तक चलने वाला बैकग्राउंड शुरू कर सकता है
काम.
यहां दिए गए स्निपेट में,
BroadcastReceiver
को शुरू करने वाले PendingIntent
के बारे में बताने के लिए:
class MainActivity : AppCompatActivity() { // ... private val geofencePendingIntent: PendingIntent by lazy { val intent = Intent(this, GeofenceBroadcastReceiver::class.java) // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling // addGeofences() and removeGeofences(). PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) } }
public class MainActivity extends AppCompatActivity { // ... private PendingIntent getGeofencePendingIntent() { // Reuse the PendingIntent if we already have it. if (geofencePendingIntent != null) { return geofencePendingIntent; } Intent intent = new Intent(this, GeofenceBroadcastReceiver.class); // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when // calling addGeofences() and removeGeofences(). geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent. FLAG_UPDATE_CURRENT); return geofencePendingIntent; }
जियोफ़ेंस जोड़ें
जियोफ़ेंस जोड़ने के लिए,
तरीके का इस्तेमाल करें.
GeofencingClient.addGeofences()
GeofencingRequest
ऑब्जेक्ट और PendingIntent
दें.
नीचे दिए गए स्निपेट में, नतीजों को प्रोसेस करने का तरीका बताया गया है:
geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run { addOnSuccessListener { // Geofences added // ... } addOnFailureListener { // Failed to add geofences // ... } }
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
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
जो जियोफ़ेंस ट्रांज़िशन होने पर सूचना पोस्ट करती है. जब उपयोगकर्ता
सूचना पर क्लिक करने पर, ऐप्लिकेशन की मुख्य गतिविधि दिखेगी:
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)) } } }
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
की जियोफ़ेंस हटा देता है. इससे, डिवाइस के पहले से जोड़ी गई जियोफ़ेंस में जाने या उनसे बाहर निकलने पर, आगे की सभी सूचनाएं बंद हो जाती हैं:
geofencingClient?.removeGeofences(geofencePendingIntent)?.run { addOnSuccessListener { // Geofences removed // ... } addOnFailureListener { // Failed to remove geofences // ... } }
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 के लिए एपीआई.
बिजली की खपत कम करना
जियोफ़ेंसिंग का इस्तेमाल करने वाले ऐप्लिकेशन में बिजली की खपत को ऑप्टिमाइज़ करने के लिए, इन तकनीकों का इस्तेमाल करें:
सेट करें सूचना का रिस्पॉन्स मिलने में लगने वाला समय ज़्यादा हो. ऐसा करने से, जियोफ़ेंस से जुड़ी सूचनाओं के इंतज़ार का समय बढ़ जाता है. इससे, डिवाइस की बैटरी की खपत कम होती है. उदाहरण के लिए, अगर आपने रिस्पॉन्सिवनेस की वैल्यू पांच मिनट पर सेट की है, तो आपका ऐप्लिकेशन हर पांच मिनट में सिर्फ़ एक बार, एंट्रेंस या एग्ज़िट की सूचना की जांच करता है. वैल्यू कम होने का मतलब यह नहीं है कि उपयोगकर्ताओं को उस समयावधि के दौरान सूचना दे दी जाएगी (उदाहरण के लिए, अगर आपने 5 सेकंड की वैल्यू सेट की है, तो सूचना).
उन जगहों के लिए ज़्यादा दायरे वाली जियोफ़ेंस का इस्तेमाल करें जहां उपयोगकर्ता काफ़ी समय बिताता है. जैसे, घर या ऑफ़िस. दायरा बड़ा करने से बिजली की खपत सीधे तौर पर कम नहीं होती, लेकिन यह कम हो जाती है ऐप्लिकेशन में एंट्रेंस या एग्ज़िट का समय जांचने की फ़्रीक्वेंसी से यह तय होता है कि ऐप्लिकेशन में कितनी पावर सप्लाई की जाती है इस्तेमाल.
अपने जियोफ़ेंस के लिए सबसे सही दायरा चुनें
सबसे अच्छे नतीजे पाने के लिए, जियोफ़ेंस का दायरा कम से कम 100 से 150 मीटर होना चाहिए. वाई-फ़ाई उपलब्ध होने पर, जगह की सटीक जानकारी आम तौर पर 20 से 50 मीटर के बीच होती है. घर के अंदर होने पर जगह की जानकारी उपलब्ध है. सटीक दूरी की सीमा 5 मीटर जितनी कम हो सकती है. जब तक आपको घर के अंदर की जानकारी न हो जियोफ़ेंस में जगह की जानकारी उपलब्ध है. मान लें कि वाई-फ़ाई से जगह की सटीक जानकारी 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()
को तब तक सीधे कॉल नहीं कर सकते जब तक कि आपका ऐप्लिकेशन, सिस्टम ऐप्लिकेशन या डिवाइस से जुड़ी नीति है कंट्रोलर (DPC) में बताया जाएगा. इसके बजाय, किसी सेटिंग पैनल पर क्लिक करें.- आपकी जियोफ़ेंस में कोई भरोसेमंद नेटवर्क कनेक्शन न हो. अगर कोई भरोसेमंद डेटा कनेक्शन नहीं है, तो हो सकता है कि सूचनाएं जनरेट न हों. इसकी वजह यह है कि जियोफ़ेंस सेवा, नेटवर्क की जगह की जानकारी देने वाली सेवा पर निर्भर करती है. इसके लिए, डेटा कनेक्शन की ज़रूरत होती है.
- चेतावनियां देर से मिल सकती हैं. जियोफ़ेंस सेवा, जगह की जानकारी के लिए लगातार क्वेरी नहीं करती. इसलिए, सूचनाएं मिलने में कुछ देरी हो सकती है. आम तौर पर, इंतज़ार का समय दो से कम होता है डिवाइस के मूव होने पर भी कम होता है. अगर बैकग्राउंड में जगह की जानकारी से जुड़ी पाबंदियां लागू हैं, तो इंतज़ार का समय औसतन दो से तीन मिनट होता है. अगर डिवाइस लंबे समय से एक ही जगह पर है, तो इंतज़ार का समय बढ़ सकता है (ज़्यादा से ज़्यादा छह मिनट तक).
अन्य संसाधन
जियोफ़ेंसिंग के बारे में ज़्यादा जानने के लिए, यह कॉन्टेंट देखें:
सैंपल
जियोफ़ेंस बनाने और उनकी निगरानी करने के लिए, सैंपल ऐप्लिकेशन.