2016-08-15 8 views
8

कहा जाता है मैं रनटाइम अनुमति अनुरोध का उपयोग कर रहा हूं, लेकिन इसमें कोई समस्या है। ऐसा लगता है कि कॉलबैक विधि onRequestPermissionsResult को अनंत काल कहा जाता है। तो जब उपयोगकर्ता अनुरोध से इंकार कर देता है तो ऐप उत्तरदायी नहीं है ..onRequestPermissionsResult को असीमित

जब भी उपयोगकर्ता 'अस्वीकार' पर क्लिक करता है तो अनुमति संवाद फिर से दिखाई देता है। केवल "फिर से पूछें" पर क्लिक करके यह फिर से दिखाई नहीं देता है। * जब 'अनुमति' दबाकर यह अच्छी तरह से काम करता है - बिना किसी समस्या के।

क्या एक बार के बाद लागू होने वाली विधि को रद्द करने का कोई तरीका है?

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
{ 
    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, LOCATION_PERMISSION_CUSTOM_REQUEST_CODE); 
} 


@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch(requestCode) 
     { 
      case LOCATION_PERMISSION_CUSTOM_REQUEST_CODE: 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // permission was granted 
        MyManager.connect(); 
        return; 
       } else { 
        // permission denied 
        return; 
       } 
      default: 
       return; 
     } 
    } 
+0

कृपया अपना कोड –

+0

@GilMoshayof पोस्ट संपादित करें) धन्यवाद – BVtp

+0

MyManager.connect() में क्या होता है? –

उत्तर

12

समस्या यहाँ, जैसा कि आप टिप्पणी में उल्लेख किया है, कि कोड है कि अनुमति का अनुरोध संवाद से चलाता है onResume विधि में बुलाया जा रहा है।

जब अनुरोध संवाद अनुमति समाप्त होती है, तो रनटाइम उस गतिविधि पर onResume पर कॉल करता है, जैसे किसी भी संवाद-थीम वाली गतिविधि होगी।

आपके मामले में, अनुमति से इनकार करने से फिर से onResume पर कॉल ट्रिगर होगा, जो एक बार फिर संवाद प्रदर्शित करेगा और अंतहीन चक्र का कारण बन जाएगा।

onCreate पर इस अनुमति अनुरोध को स्थानांतरित करना, या कुछ अन्य प्रवाह आपकी समस्या का समाधान करेगा।

+3

सिर्फ स्पष्टीकरण का एक बिंदु: "जैसा कि कोई भी संवाद होगा" - यह एक संवाद के लिए सच है थीमाधारित गतिविधि। यह 'संवाद' के लिए सच नहीं है, क्योंकि 'संवाद' गतिविधि जीवन चक्र को प्रभावित नहीं करता है। इस मामले में, रनटाइम अनुमतियाँ संवाद एक संवाद-थीम वाली गतिविधि है। – CommonsWare

+0

इसके लिए धन्यवाद! जवाब संपादित किया। –

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