2016-02-11 9 views
7

मैं एंड्रॉइड मार्शमलो में उपयोगकर्ता द्वारा अनुमोदित/निरस्त किए जाने की अनुमतियों की जांच करने की कोशिश कर रहा हूं। दुर्भाग्यवश ContextCompat.checkSelfPermission() (जो Context.checkCallingOrSelfPermission के आसपास एक वार्पर है) हमेशा PackageManager.PERMISSION_GRANTED (0) लौटाता है यदि आपने अनुमति की वर्तमान स्थिति के बावजूद अपने मैनिफेस्ट में उस विशिष्ट अनुमति को शामिल किया है (उदाहरण के लिए यदि उपयोगकर्ता ने अनुमति रद्द कर दी है)। मैंने someContext.checkCallingOrSelfPermission() भी कोशिश की, लेकिन परिणाम वही है।एंड्रॉइड का ContextCompat.checkSelfPermission() गलत मान देता है

क्या किसी ने इसका अनुभव किया है? मैं एनवीडिया शील्ड कंसोल पर एंड्रॉइड मार्शमलो का उपयोग कर रहा हूं (एनवीडिया के बीटा प्रोग्राम का उपयोग कर)।

+2

आपका 'targetSdkVersion' क्या है? – CommonsWare

+0

@ कॉमन्सवेयर हाँ, आपने समस्या को ठहराया! मैं एक जवाब में व्याख्या करने जा रहा हूँ। – Metallica

उत्तर

9

जैसा कि यह पता चला है, मैनिफेस्ट में targetSdkVersion 23 होना चाहिए, मेरा 22 होना चाहिए। यदि आपका लक्ष्य एसडीके 23 (एंड्रॉइड 6) है, तो सभी अनुमतियां (आपके मैनिफेस्ट में) डिफ़ॉल्ट रूप से अक्षम होती हैं, जबकि यदि आपका लक्ष्य एसडीके 22 (एंड्रॉइड 5.1) है और आपका ऐप एंड्रॉइड 6 पर चल रहा है, जब उपयोगकर्ता ऐप इंस्टॉल करता है तो सभी अनुमतियां डिफ़ॉल्ट रूप से सक्षम होती हैं, और यदि उपयोगकर्ता बाद में अनुमतियों को निरस्त करता है, तो उल्लिखित एपीआई गलत मान देता है (जो मेरी राय में एक बग है)।

+4

आप 'अनुमति जांचकर्ता' का भी उपयोग कर सकते हैं, जो आपको बताएगा कि क्या उपयोगकर्ता ने सेटिंग समूह के माध्यम से अनुमति समूह से इनकार किया है: http://developer.android.com/reference/android/support/v4/content/PermissionChecker.html – CommonsWare

+1

उसी समस्या के साथ लक्ष्य 22 और एंड्रॉइड 6.0 पर चल रहा है। – einverne

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