अनुरोध सेवा अनुमतियाँ Android M से




android-permissions android-6.0-marshmallow (2)

आप एप्लिकेशन के संदर्भ का उपयोग करके गतिविधि के बिना अनुमतियों की जांच कर सकते हैं, लेकिन परमिट का अनुरोध करते समय आपको गतिविधि की आवश्यकता होगी। एप्लिकेशन संदर्भ प्राप्त करने के लिए बस getApplicationContext() कॉल करें और इसके बजाय अनुमतियों का उपयोग करने के लिए ContextCompat.checkSelfPermission() उपयोग करें।

सही तरीके से रनटाइम अनुमतियों का उपयोग करने की अच्छी जानकारी भी है:

यह देखने के लिए कि आपके पास कोई अनुमति है या नहीं, ContextCompat.checkSelfPermission() विधि को कॉल करें। उदाहरण के लिए, यह स्निपेट दिखाता है कि यह देखने के लिए कि गतिविधि को कैलेंडर में लिखने की अनुमति है या नहीं:

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);

यदि एप्लिकेशन की अनुमति है, तो विधि PackageManager.PERMISSION_GRANTED वापस कर देता है, और एप्लिकेशन ऑपरेशन के साथ आगे बढ़ सकता है। यदि एप्लिकेशन के पास अनुमति नहीं है, तो विधि PERMISSION_DENIED लौटाती है, और ऐप को उपयोगकर्ता से अनुमति के लिए स्पष्ट रूप से पूछना होगा।

संपादित करें: आपके द्वारा सेवा पर अनुमतियों की जाँच करने के बाद, आपको अनुमति के लिए गतिविधि की आवश्यकता होगी:

public static void requestPermissions (Activity activity, String[] permissions, int requestCode)

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

चूँकि इस मामले में मेरे पास कोई गतिविधि नहीं है, requestPermissions() लिए कॉल requestPermissions() एक requestPermissions() देता है क्योंकि मेरी सेवा को किसी गतिविधि में नहीं डाला जा सकता है।

मेरी विधि कॉल:

ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_COARSE_LOCATION);

क्या इसका अब तक कोई समाधान है या क्या मुझे ऐसी स्थिति में नहीं चलने के लिए सेवा के अधिकारों को रद्द करना होगा।


आप किसी सेवा के माध्यम से अनुमति का अनुरोध नहीं कर सकते, क्योंकि एक सेवा यूआई से जुड़ी नहीं है, इस तरह की समझदारी है। चूंकि एक सेवा संदर्भ एक गतिविधि नहीं है, जो अपवाद आपको मिल रहा है वह समझ में आता है।

आप जांच कर सकते हैं कि क्या अनुमति किसी सेवा में उपलब्ध है और किसी गतिविधि में अनुमति का अनुरोध करें (हाँ आपको गतिविधि की आवश्यकता है)।

एक सेवा में:

 public static boolean checkPermission(final Context context) {
return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
        && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
 }

और एक गतिविधि में:

private void showPermissionDialog() {
    if (!LocationController.checkPermission(this)) {
        ActivityCompat.requestPermissions(
            this,
            new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
            PERMISSION_LOCATION_REQUEST_CODE);
    }
}




android-6.0-marshmallow