11

काम नहीं कर रहा है मैं एक साधारण ऐप बनाने की कोशिश कर रहा हूं जो गैलरी ऐप से एक छवि प्राप्त कर सकता है और उसे छवि बटन पर प्रदर्शित कर सकता है। मैं एंड्रॉइड 5.0.1 चलाने वाले फोन पर एपीआई 21 के साथ परीक्षण कर रहा हूं। दुर्भाग्यवश, कोई फर्क नहीं पड़ता कि मैं क्या प्रयास करता हूं, मुझे सुरक्षा त्रुटि मिलती है - भले ही मैं अनुमतियां निर्दिष्ट करता हूं।एंड्रॉइड READ_EXTERNAL_STORAGE अनुमति

चित्र लाने में प्राप्त करने के लिए मेरे कोड है:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent){ 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode){ 
     case PICK_IMAGE_REQUEST: 
      if(resultCode == RESULT_OK && imageReturnedIntent != null && imageReturnedIntent.getData() != null) { 
       Uri uri = imageReturnedIntent.getData(); 
       try { 
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
        // Log.d(TAG, String.valueOf(bitmap)); 
        ImageButton ib = (ImageButton) findViewById(R.id.inputImg); 
        ib.setImageBitmap(bitmap); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      break; 
    } 
} 

कोड काम करता है जब मैं ड्रॉपबॉक्स से एक चित्र का चयन करने का प्रयास करें, लेकिन जब मैं गैलरी से एक छवि का चयन करें, मैं

java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/35634 from pid=25240, uid=10070 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
मिल

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="[REDACTED]"> 

    <uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="23" /> 

    <uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> 

    <application> 
     [REDACTED] 
    </application> 

</manifest> 

मैं:

मैं प्रकट का एक बच्चा READ_EXTERNAL_STORAGE के लिए उपयोग-अनुमति टैग किए गए मैंने अन्य पदों पर उच्च और निम्न खोज की है, लेकिन अभी भी यह पता लगाना प्रतीत नहीं होता है कि मुझे अभी भी यह अजीब त्रुटि क्यों मिल रही है।

+1

इसे पढ़ें http://stackoverflow.com/questions/21196453/external-storage-permission-issue-with-mediaprovider-ring-tones या http://stackoverflow.com/questions/19837358/android-kitkat- सुरक्षा अपवाद-कब-कोशिश-से-पढ़ने-से-मध्यस्थ –

उत्तर

13

समस्या
आपका त्रुटि

java.lang.SecurityException है: अनुमति इनकार: पढ़ने com.android.providers .media.MediaProvider यूरी सामग्री: // मीडिया/बाहरी/छवियों/मीडिया/35634 pid = 25240 से, uid = 10070 r एंड्रॉइड.permission.READ_EXTERNAL_STORAGE, या gra ntUriPermission()।

कारण
आप सही ढंग से दे रही है नहीं कर रहे हैं android:maxSdkVersion="18", जो दस्तावेज़ के अनुसार की वजह से अनुमतियाँ।

उच्चतम एपीआई स्तर जिस पर यह अनुमति आपके ऐप को दी जानी चाहिए। इस विशेषता को सेट करना उपयोगी है अगर आपके ऐप की अनुमति की आवश्यकता किसी निश्चित API स्तर से शुरू करने की आवश्यकता नहीं है।

जब तक आप API 21 अपने अनुप्रयोग के लिए अनुमति नहीं दी थी ठीक बर्ताव कर रही है।

अधिक जानकारी के लिए this topic देखें।

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

महत्वपूर्ण::

समाधान
आप
API 21 के तहत पढ़ने अनुमतियों देना चाहते हैं, तो आप उन्हें के रूप में घोषित करना चाहिए

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


तो (इस मामले में) सही तरीका होगा:

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

पर
जोड़ें आप डेटा को बचाने के लिए आप WRITE_EXTERNAL_STORAGE अनुमतियों को जोड़ना होगा चाहते हैं।

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

काम नहीं करता है, मैं कसम खाता हूं कि यह कल रात काम नहीं कर रहा था जब मैंने उपकरण और maxsdk के बिना अनुमति की कोशिश की, और अब यहां यह कुछ भी नहीं हुआ जैसा सहयोग है। आपको बहुत - बहुत धन्यवाद! – Zheryu

+0

मदद करने में खुशी हुई;) –

2

बस नीचे एक के साथ की जगह और कोशिश,

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

यह – Karoly

1

जबकि कुछ उपकरणों आप अपने सेटिंग में जाकर स्पष्ट रूप से अनुमति देनी होगी पर डिबगिंग -> MY_APPLICATION - -> क्षुधा> अनुमतियां और फिर आवश्यक अनुमतियां मिल।

0

AndroidManifest.xml

में नीचे जोड़ने
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

हम भी के लिए app वास्तव में बाह्य भंडारण का उपयोग करने की गतिविधि में अनुमति का अनुरोध करने की आवश्यकता है के अलावा। https://developer.android.com/training/permissions/requesting.html

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