2016-08-06 6 views
6

पहली नजर बातें जीपीएस निर्देशांक प्राप्त करने के लिए से सरल लग रहा है (स्यूडोकोड):वास्तुकला आधारित अनुप्रयोग

private void onStart() { 
    res = ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); 
    if (res != PackageManager.PERMISSION_GRANTED) { 
    requestPermissions(); 
    } else { 
    startGps(); 
    } 
} 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    if (all_ok) 
    startGps(); 
} 
private void startGps() { 
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    LocationListener locationListener = new LocationListener() {...}; 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
} 

लेकिन यह कैसे async ईवेंट प्रबंधित करने के:

  1. क्या होगा अगर बाद locationManager.requestLocationUpdates उपयोगकर्ता रोकें और एप्लिकेशन को फिर से शुरू करें,

    1.1 क्या मैं फिर से जीपीएस डेटा प्राप्त करने के लिए locationManager.requestLocationUpdates पर कॉल करूं?

    1.2 यदि उपयोगकर्ता मेरे ऐप को फिर से शुरू करने के बाद जीपीएस को निष्क्रिय करता है, तो मुझे onProviderDisabled ईवेंट प्राप्त होता है?

  2. locationManager.requestLocationUpdates कॉल के बाद होने पर ACCESS_FINE_LOCATION अनुमति के रनटाइम को कैसे रद्द किया जाए? रद्द करने के बाद क्या हो रहा है, क्या एंड्रॉइड मुझे onStatusChanged या onProviderDisabled के माध्यम से रिपोर्ट करता है?

  3. मैंने सुना है कि नए एंड्रॉयड स्क्रीन पर कई विंडो की अनुमति, क्या "प्रणाली वरीयताएँ" के लिए एक और, मेरे ऐप पर होता है अगर एक खिड़की से संबंधित होता है, और उपयोगकर्ता के बिना अपने ऐप के रोकें/फिर से शुरू ACCESS_FINE_LOCATION वापस ले?

उत्तर

1
  1. जवाब सवाल करने के लिए 1

1,1: इसका बेहतर जीपीएस को सुन अपने ऐप को रोका या बंद कर दिया (onPause() और onStop()) बंद करने के लिए। यह बैटरी जीवन को बचाएगा। तो रीसेम() विधि में फिर से श्रोता शुरू करें।

removeUpdates (locationListener)

आप न removeUpdates चाहते हैं, तो आप locationManager.requestLocationUpdates फिर से फोन कॉल की जरूरत नहीं है।

1.2: जब भी ऐप अग्रभूमि में आता है, तो हैप्रोवाइडरएनेबल (प्रदाता) जांचें और उपयोगकर्ता को एक संवाद दिखाएं।

आपके प्रश्न का उत्तर करने के लिए:

https://developer.android.com/reference/android/location/LocationManager.html

मामले में प्रदाता उपयोगकर्ता रूप से अक्षम है, अद्यतन बंद कर देंगे और एक प्रदाता उपलब्धता अद्यतन भेजा जाएगा। जैसे ही प्रदाता फिर से सक्षम हो जाता है, स्थान अपडेट तुरंत शुरू हो जाएंगे और एक प्रदाता उपलब्धता अपडेट भेजा जाएगा। प्रदाता किसी भी समय, प्रदाता को अतिरिक्त विशिष्ट के साथ स्थिति अद्यतन भी भेज सकते हैं। यदि कॉलबैक की आपूर्ति की गई थी तो स्थिति और उपलब्धता अपडेट ऑनप्रोवायरडिस्पेबल (स्ट्रिंग), ऑनप्रोइडरएनेबल (स्ट्रिंग) या ऑनस्टैटस चेंज (स्ट्रिंग, इंट, बंडल) पर हैं।

  1. अनुमति रद्द होने पर आपका एप्लिकेशन क्रैश हो सकता है। क्योंकि आपके पास स्थान सुविधा तक पहुंच नहीं होगी।

java.lang.SecurityException: प्रदाता नेटवर्क ACCESS_FINE_LOCATION या ACCESS_COARSE_LOCATION अनुमति की आवश्यकता है

  1. बहु खिड़की उपकरणों में, जिसमें राज्य को फिर से शुरू हो जाएगा केंद्रित है एक अनुप्रयोग, अन्य एप्लिकेशन रोके गए राज्य में होगा।और अनुमति रद्द करने के संबंध में मैंने बिंदु 2 में उत्तर दिया है।

यदि सेटिंग सेटिंग्स से बंद है तो तृतीय पक्ष ऐप्स को इसके बारे में अधिसूचित नहीं किया जाएगा। स्थान की स्थिति की जांच करने के लिए आपको isProviderEnabled (प्रदाता) विधि का उपयोग करने की आवश्यकता है।

-1

कृपया एंड्रॉइड में रन टाइम अनुमति जोड़ने के लिए और जीपीएस रनटाइम अनुमति डेमो का वर्णन करने के लिए पूरी तरह वर्णित करने के लिए इस लिंक का पालन करें।

https://blog.xamarin.com/requesting-runtime-permissions-in-android-marshmallow/

+0

असल में अनुरोध में मेरी कोड लगभग सभी कि में अपने लिंक, कैसे उस के बाद चीजों को संभाल करने के बारे में प्रश्न द्वारा प्रदान की है। – user1244932

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