18

मेरे पास मेरे ऐप में दो गतिविधियां हैं, मुख्य एक्टिविटी कॉल इमेज पिकर है, जिसमें ग्रिड व्यू फोन गैलरी में सभी छवियों को बिछा रही है, जहां मैं कर्सर प्राप्त करने के लिए एक सामग्री रिसेल्वर का उपयोग करता हूं।सुरक्षा अपवाद: अनुमति अस्वीकार: पढ़ने (केवल एमुलेटर पर)

जब मैंने इसका परीक्षण किया तो यह मेरे फोन पर ठीक काम करता था लेकिन हर बार तुरंत एमुलेटर पर दुर्घटनाग्रस्त हो गया।

java.lang.SecurityException: Permission Denial:reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=5934, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

मैं अनुमति प्रकट में लिखा है है, जिन्हें आप नीचे:

यहाँ त्रुटि लॉग है

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".ImagePicker" /> 
</application> 
+0

कोशिश एसडी कार्ड भंडारण स्थान निर्दिष्ट करने के लिए। – userDroid

+0

क्षमा करें, मैं यह कैसे कर सकता हूं? मैंने इसे 1 जी तक सेट किया। – TPWang

उत्तर

23

Android का कौनसा संस्करण अपने एमुलेटर है? और क्या आप एसडीके 23 के साथ संकलित कर रहे हैं? यदि आपका एमुलेटर मार्शमलो है, तो आपको रनटाइम पर अनुमति की स्पष्ट रूप से जांच करनी होगी। यह नए अनुमति मॉडल के कारण है।

अधिक जानकारी के लिए बाहर अनुमतियों पर डॉक्स की जांच: https://developer.android.com/training/permissions/index.html

+0

धन्यवाद! इससे मेरी समस्या हल हो गई! – TPWang

+0

यह स्पष्ट नहीं करता है कि यह सामान्य उपकरणों पर क्यों काम करता है – Day

3

यदि आपका ऐप लक्ष्य संस्करण है 23 तो यह आपको यह त्रुटि दे देंगे, अगर आपकी आवश्यकता तो एपीआई स्तर 23 में शामिल हैं आप लक्ष्य 23 और जरूरत बनाने की जरूरत है अनुमतियों की जाँच करने के लिए गतिशील रूप यहाँ डेवलपर साइट की जांच से उदाहरण है https://developer.android.com/training/permissions/requesting.html

नोट:भले ही आप लक्ष्य 22 दे या कम भी अपना एप्लिकेशन (जाँच अनुमति) त्रुटि इस के बिना 23 के साथ काम करेंगे। एमुलेटर बनाने के दौरान

14

Before calling method, check for permission.

private void checkPermission(){ 
    int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); 

    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {  
     ActivityCompat.requestPermissions(   
    getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Constants.WRITE_EXTERNAL_STORAGE); 
    } else {  
     callMethod(); 
    } 
} 

Check permission result.

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     switch (requestCode) { 

      case Constants.WRITE_EXTERNAL_STORAGE: 
       if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { 
        callMethod(); 
       } 
       break; 

      default: 
       break; 
     } 
    } 
+0

'Constants.WRITE_EXTERNAL_STORAGE' कोई भी इच्छित हो सकता है :) मैंने ऐप-डिफ़ाइंड उदाहरण में अपने स्वयं के स्थिरता से प्रतिस्थापित किया:' स्थिर अंतिम int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 99; ' – CGR

+0

त्रुटि देता है प्रतीक प्रतीक प्रकट नहीं कर सकते हैं। – Solo

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