2016-05-06 9 views
5

मैं एंड्रॉइड के लिए एक कस्टम फोनगैप प्लगइन बनाने की प्रक्रिया में हूं जो ऐप अग्रभूमि में है और जब यह पृष्ठभूमि में है, तो दोनों स्थान पर नज़र रखता है। FusedLocationProviderAPI का उपयोग करने पर Google दस्तावेज़ उल्लेखनीय रूप से स्पष्ट है। प्रक्रिया मैं अब तक बाहर काम किया है के रूप मेंएंड्रॉइड पर आवधिक अग्रभूमि स्थान ट्रैकिंग

  • इस प्रकार सुनिश्चित करें कि एपीआई उपलब्ध है

    GoogleApiAvailability api = GoogleApiAvailability.getInstance(); 
    int code = api.isGooglePlayServicesAvailable(ctxt); 
    return (code == ConnectionResult.SUCCESS); 
    
  • सौंपा कॉलबैक requestLocationUpdates विधि द्वारा retured परिणाम को संभालने के लिए के साथ एक LocationListener परिभाषित है।

  • एक LocationRequest बनाएं

यहाँ जहां चीजें थोड़ा स्पष्ट नहीं हो रहा है

  1. setInterval - अंतराल, जिस पर एप्लिकेशन द्वारा स्थान अपडेट
  2. setFastestInterval चाहता है - अंतराल, जिस पर यह अपडेट की खपत होगी अगर उपलब्ध हो।
  3. setSmallestDistance & setPriorty - स्पष्ट पर्याप्त
  4. setNumUpdates - यह कैसे काम करता है नहीं मेरे लिए स्पष्ट है। लाइनों के बीच पढ़ना मुझे लगता है कि यदि मैं setInterval(60000) और setNumUpdates(1000) का उपयोग करता हूं तो सिस्टम अगले 6000 मिनट के लिए स्थान अपडेट भेजना जारी रखेगा या जब तक ऐप पृष्ठभूमि/शटडाउन हो या मैं/उपयोगकर्ता स्थान अपडेट रद्द नहीं कर लेता।

लेकिन फिर यह सवाल पूछता है - एक अच्छा नागरिक होने के लिए ऐप को क्या करने की आवश्यकता है। मैं यह सोचते हैं कि यह

  • रिकार्ड PendingResult की तरह कुछ requestLocationUpdates कॉल द्वारा दिया जा रहा करने के लिए होगा।
  • का पता लगाने जब onPause घटना होती है
  • कॉल PendingResultt.cancel() दे ऐप्स पृष्ठभूमि

मैं बहुत आभारी होगी अगर किसी को इस कार्यप्रवाह की सत्यता पर टिप्पणी कर सकता करने के लिए जाने से पहले।

एक संबंधित मुद्दा - documentationPendingResult के लिए राज्यों

यह फोन करने वाले या कॉलबैक रिसीवर प्राप्त परिणाम के साथ जुड़े किसी भी संसाधनों को रिहा करने की जिम्मेदारी है।

यह मुझे स्पष्ट नहीं है कि वे यहां किस संसाधन के बारे में बात कर रहे हैं। LocationListener.onLocationChanged ईवेंट एक स्थान वस्तु देता है जो मुझे लगता है कि जब यह गुंजाइश से बाहर हो जाता है तो कचरा इकट्ठा किया जाएगा। संभावित रूप से PendingResultrequestLocationUpdates द्वारा लौटाया जाना चाहिए और फिर ऐप पृष्ठभूमि पर जाने पर शून्य पर सेट होना चाहिए। क्या संसाधनों को जारी करने के जरिए कुछ और करने की ज़रूरत है?


कुछ घंटे बाद

मैं अपने परीक्षण एप्लिकेशन

  • अनुप्रयोग 1 के दो संस्करणों बनाया: setNumUpdates(10000) साथ LocationRequest अप सेट करता है। फॉर्म ऐप 1 में स्थान परिवर्तन पर टोस्ट्स को रोकता है: स्थान है ...
  • ऐप 2: setNumUpdates(1) के साथ स्थानRequest सेट करता है। प्रपत्र अनुप्रयोग 2` में स्थान परिवर्तन पर टोस्ट पॉप अप होता है: स्थान है ...

मैं एक बहुत साफ थोड़ा FakeGPS बुलाया एप्लिकेशन की मदद से दो क्षुधा एक साथ चल रहा है और नकली स्थिति परिवर्तन किया था। ऐप 1 और ऐप 2 ने मुझे एक अपडेट के साथ प्रदान किया जब मैंने अपना पहला नकली स्थान परिवर्तन किया। हालांकि, बाद के सभी स्थान परिवर्तन केवल ऐप द्वारा रिपोर्ट किए गए थे।

अनुमान के अनुसार setNumUpdates समय-समय पर अद्यतनों के लिए मतदान के लिए एक तंत्र प्रदान करता है। थोड़ा उलझन में यह है कि ऐप पृष्ठभूमि के बाद भी अपडेट जारी रहता है - हालांकि मुझे लगता है कि यह काफी हद तक है क्योंकि यह ओएस की दया पर है जो फिट होने पर इसे मार देगा।

हालांकि, उपरोक्त सभी अनुभवजन्य परीक्षण पर आधारित है। मुझे setNumUpdates सेटिंग पर आश्चर्यजनक रूप से कम लगता है।

+0

के लिए पर्याप्त परिभाषा है, क्या आपने ऐप 1 पृष्ठभूमि पर जाने पर स्थान अपडेट को अनियंत्रित किया है? यदि नहीं, तब तक आप अपडेट प्राप्त करना जारी रखेंगे जब तक फ्रेमवर्क मूल्य App1 पर सेट किए गए अपडेट की संख्या का पता लगाता है। – 7383

+0

आप सही हैं - जब ऐप पृष्ठभूमि में आता है तो मुझे उस स्थान अपडेट को अनधिकृत करना चाहिए और किसी स्थानसूची के स्थान पर लंबित इंटेन्टेंट के साथ एक और सेटअप करना चाहिए। मैंने ऑनपोज़ घटना से लंबितResult.cancel() जारी करके ऐसा करने का प्रयास किया था, लेकिन स्पष्ट रूप से यह आवश्यक नहीं है - दस्तावेज़ों का सुझाव है 'FusedLocationAPI.removeLocation ...'। हालांकि, यह अभी भी उन प्रश्नों का उत्तर नहीं देता है जिन्हें मैंने यहां पूछा है - जिसमें SetNumUpdates की भूमिका शामिल है जिसे मैंने अनुभवपूर्वक स्थापित किया है लेकिन इसके लिए कोई दस्तावेज नहीं मिल रहा है। – DroidOS

उत्तर

1

आपके प्रश्न के लिए, यदि ऐप पृष्ठभूमि में है, तो भी अपडेट जारी है: उत्तर: जब भी आपका ऐप पृष्ठभूमि में होता है और अपडेट करने के लिए पंजीकृत होता है, तो कोई भी सेट सेट नहीं होता है, तो अपडेट अपडेट हो जाएगा, आपको अपडेट मिलेंगे , जब तक ओएस ने स्मृति के लिए आपके ऐप को मार डाला नहीं है। सेटमूमडेट्स सेट करने वाला एकमात्र अंतर है, जैसा कि आपने सही कहा है, यदि यह 1 पर सेट है, तो यह केवल एक अपडेट देगा, जब तक कि आपने दोबारा पंजीकरण नहीं किया हो। लिंक में SetNumUpdates https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#public-methods

संबंधित मुद्दे