अपवाद 'खुला विफल: EACCES (अनुमति अस्वीकृत)' Android पर


297

मैं समझ रहा हूं

खुला विफल: EACCES (Permission denied)

रेखा पर OutputStream myOutput = new FileOutputStream(outFileName);

मैंने रूट की जाँच की, और मैंने कोशिश की android.permission.WRITE_EXTERNAL_STORAGE

मैं इस समस्या को कैसे ठीक करुं?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

एंड्रॉइड टैबलेट पर मुझे एक ही समस्या थी, लेकिन मेरी स्थिति अद्वितीय हो सकती है, इसलिए मैं यहां एक टिप्पणी में अपने समाधान की रिपोर्ट करता हूं। त्रुटि तब हुई जब ऐप ने निर्देशिका / डेटा / डेटा / myapp / foo तक पहुंचने का प्रयास किया, जिसमें 50 से अधिक xml फाइलें थीं। बग के कारण एप्लिकेशन ने फ़ोल्डर को साफ नहीं किया। कुछ पुरानी फ़ाइलों को हटा दिए जाने के बाद, त्रुटि गायब हो गई। मुझे नहीं पता क्यों। यह जेनेरिक एंड्रॉइड डिवाइस की समस्या हो सकती है।
हांग

इसने मुझे हल किया: stackoverflow.com/questions/33666071/…
partho

जवाबों:


236

मुझे भी यही समस्या थी ... <uses-permissionगलत जगह पर था। यह सही है:

 <manifest>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        ...
        <application>
            ...
            <activity> 
                ...
            </activity>
        </application>
    </manifest> 

uses-permissionटैग के बाहर होने की जरूरत है applicationटैग।


2
यह है कि उपयोग-अनुमति को एप्लिकेशन के बाहर होना चाहिए
user462990

3
मुझे एक चेतावनी मिलती है: " <uses-permission>टैग के बाद <application>टैग दिखाई देता है "
mr5

11
चेतावनी एंड्रॉयड में 4.4.4 पैरामीटर का उपयोग नहीं करते हैं android:maxSdkVersion="18"। यह इस अपवाद को उत्पन्न कर रहा था
guisantogui

1
यह अनुमति एपीआई स्तर 19 में शुरू करने से पहले लागू की जाती है। एपीआई स्तर 19 से पहले, यह अनुमति लागू नहीं की जाती है और बाहरी भंडारण के लिए सभी ऐप्स अभी भी पढ़ने के लिए उपयोग करते हैं।
ज़ार ई अहमर

1
im lvl 15 का उपयोग करते हुए, OTG USB स्टिक में फ़ाइल ले जाने का प्रयास करते समय त्रुटि हो रही है
रवि मेहता

330

एपीआई 23+ के लिए आपको पढ़ने / लिखने की अनुमति का अनुरोध करने की आवश्यकता है, भले ही वे पहले से ही आपके प्रदर्शन में हों।

// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Checks if the app has permission to write to device storage
 *
 * If the app does not has permission then the user will be prompted to grant permissions
 *
 * @param activity
 */
public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

AndroidManifest.xml

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

एपीआई 23+ के लिए अनुमति के अनुरोध के बारे में आधिकारिक दस्तावेज के लिए, https://developer.android.com/training/permissions/pququ.html पर देखें।


13
बस इसे स्पष्ट करने के लिए, कार्य करने के लिए, गतिविधि को गतिविधि अनुमतियाँ अनुरोध प्रतिक्रिया को संभालना होगा। देखें developer.android.com/training/permissions/... अधिक जानकारी के लिए।
kldavis4

स्पष्टीकरण और उदाहरण के साथ आसान लिंक यहाँ inthecheesefactory.com/blog/…
पॉल अलेक्जेंडर

1
क्या यह बुरी बात नहीं है? उपयोगकर्ता अनुभव के संबंध में।
एम। उस्मान खान

5
लेकिन मैं इसका उपयोग कहां करूं? उदाहरण के लिए, अगर मुझे कोई चित्र लेना है, तो क्या मुझे startActivityForResult से पहले या onActivityResult से पहले VerStoragePien चलाना होगा? यह वास्तव में मुझे भ्रमित करता है।
किवी ली

3
धन्यवाद मेरी समस्या का समाधान। बस एक नोट: अगर कोई "घोषणापत्र" को हल नहीं कर सकता है, तो आपको बस "android.Manifest" आयात करने की आवश्यकता है।
ओबैदा अल्क्यूरायन

166

Google के पास Android Q पर एक नई सुविधा है : बाहरी भंडारण के लिए फ़िल्टर किया गया दृश्य। इसके लिए एक त्वरित समाधान AndroidManifest.xml फ़ाइल में यह कोड जोड़ना है:

<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android Q. -->
    <application android:requestLegacyExternalStorage="true" ... >
     ...
    </application>
</manifest>

आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: https://developer.android.com/training/data-storage/compatibility


@ बिली मैंने देखा कि यह केवल एपी 29 के साथ उपकरणों पर होता है। इसलिए मैंने फाइलों के प्रदाता में बदलाव के लिए खोज की
उरीएल फ्रैंकेल

अंत में इस लाइन के साथ काम करने के लिए Cloudtestingscreenshotter_lib.aar मिला, AndroidTest मेनिफ़ेस्ट में शामिल किया गया, इस खोज के लिए आपका बहुत-बहुत धन्यवाद।
बोको 11:19

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

मैं इस अच्छी छोटी काली जादू की चाल के बारे में अधिक पढ़ना चाहता हूं, लेकिन दुर्भाग्य से लिंक में 404 त्रुटि है ... धन्यवाद वैसे भी
सैडिसो

इसकी चेतावनी देते हुए android:requestLegacyExternalStorage="true"इस अभ्यस्त कम संस्करणों ryt तोड़? @ युरीलफ्रैंकेल
सूर

58

एमुलेटर के अंदर एप्लिकेशन को चलाते समय मैंने एक बार यह देखा है। एमुलेटर सेटिंग्स में, आपको बाहरी भंडारण ("एसडी कार्ड") के आकार को ठीक से निर्दिष्ट करने की आवश्यकता है। डिफ़ॉल्ट रूप से, "बाहरी संग्रहण" फ़ील्ड खाली है, और इसका मतलब है कि ऐसा कोई उपकरण नहीं है और ईएसीएसओआर को भले ही प्रकट में अनुमति दी गई हो।


51

सभी उत्तरों के अलावा, सुनिश्चित करें कि आप अपने फोन का उपयोग USB संग्रहण के रूप में नहीं कर रहे हैं।

मुझे USB स्टोरेज मोड पर HTC सेंसेशन पर समान समस्या हो रही थी। मैं अभी भी ऐप को डिबग / रन कर सकता हूं, लेकिन मैं बाहरी स्टोरेज को नहीं बचा सकता।


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

1
जब मैं सैमसंग गैलेक्सी S6 डिवाइस को कनेक्ट करता हूं तो यह पहली बार "DENY" या "ALLOW" के साथ "डिवाइस डेटा तक पहुंच की अनुमति देता है" एक विकल्प देता है और साथ ही नोटिफिकेशन बार से मुझे 1. MTP 2. PTP 3. MIDI के लिए USB का उपयोग करने का विकल्प मिल रहा है। उपकरण 4. आरोप लगाना। कौन सा चुनना है?
परीक्षण

34

Android जोड़ें : requestLegacyExternalStorage = Android मैनिफ़ेस्ट के लिए "सही" यह एसडीके 29+ पर एंड्रॉइड 10 (क्यू) के साथ काम किया है
या एंड्रॉइड एक्स को माइग्रेट करने के बाद ।

 <application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon=""
    android:label=""
    android:largeHeap="true"
    android:supportsRtl=""
    android:theme=""
    android:requestLegacyExternalStorage="true">

वाह पूरी तरह से काम करता है, यही जवाब मैं चाह रहा था, महान, शुक्रिया @ श्रीधर, आपने मेरा दिन बचा लिया
आयुष

29

मेरा मुद्दा "TargetApi (23)" के साथ था, जो आपके minSdkVersion 23 को bellow होने पर आवश्यक है।

तो, मेरे पास निम्नलिखित स्निपेट के साथ अनुरोध की अनुमति है

protected boolean shouldAskPermissions() {
    return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}

@TargetApi(23)
protected void askPermissions() {
    String[] permissions = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"
    };
    int requestCode = 200;
    requestPermissions(permissions, requestCode);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
// ...
    if (shouldAskPermissions()) {
        askPermissions();
    }
}

28

Android Q के लिए समाधान :

<application ...
    android:requestLegacyExternalStorage="true" ... >

आपने मेरा दिन बचाया है। अनुमति दी गई है, लेकिन ग्लाइड छवियों को तब तक नहीं पढ़ सकता जब तक मैं इसे सेट नहीं करता।
Leegor

सावधानी: एंड्रॉइड 11 अगस्त 2020 में पूरी तरह से विरासत की पहुंच को हटा देगा, इसलिए अपने ऐप्स के लिए स्टोरेज एक्सेस फ्रेमवर्क (SAF) का उपयोग करने के लिए बेहतर अपग्रेड फ़ाइल
dimib

16

मैं वही अनुभव कर रहा हूं। मैंने जो पाया वह यह है कि यदि आप सेटिंग्स पर जाते हैं -> एप्लिकेशन मैनेजर -> आपका ऐप -> अनुमतियां -> भंडारण सक्षम करें , यह समस्या को हल करता है।


1
मुझे यह अनुभाग नहीं मिल रहा है?
इवान सेवई

13

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

इसलिए मुझे USB कनेक्शन बंद करना पड़ा और सब कुछ ठीक चला।


मेरे लिए भी काम किया। लेकिन यह काम क्यों करता है? क्या फर्क पड़ता है USB को PC से कनेक्ट नहीं करना।
user13107

अच्छा प्रश्न। मैंने कभी इसकी जांच नहीं की। मुझे लगता है कि जिस समय आप डिवाइस कनेक्ट करते हैं सिस्टम से एक राइट लॉक होता है (इसलिए यह आपके कंप्यूटर पर एक यूएसबी डिवाइस का अनुकरण कर सकता है)। शायद यह असंगत डेटा से बचने के लिए है। हालांकि यकीन नहीं हो रहा है।
टोबियास रीच

मुझे यहां कारण मिला है stackoverflow.com/questions/7396757/… मेरा उत्तर भी देखें stackoverflow.com/a/43863548/1729501
user13107

13

मुझे सैमसंग गैलेक्सी नोट 3 पर भी यही समस्या थी, सीएम 12.1 चल रहा था। मेरे लिए मुद्दा यह था कि मेरे पास था

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

और उपयोगकर्ता फ़ोटो लेने और संग्रहीत करने के लिए इसका उपयोग करना पड़ा। जब मैंने ImageLoader में उन्हीं तस्वीरों को लोड करने की कोशिश की तो मुझे (Permission denied)त्रुटि मिली । समाधान स्पष्ट रूप से जोड़ना था

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

चूंकि उपरोक्त अनुमति केवल API संस्करण 18 तक लिखने की अनुमति को सीमित करती है, और इसके साथ ही पढ़ने की अनुमति है।


मेरी मदद नहीं की! एक कोशिश करो! धन्यवाद।
साकिबॉय

9

सभी उत्तरों के अलावा, यदि क्लाइंट एंड्रॉइड 6.0 का उपयोग कर रहे हैं, तो एंड्रॉइड ने (मार्शमैलो) के लिए नया अनुमति मॉडल जोड़ा ।

ट्रिक: यदि आप 22 या उससे नीचे के संस्करण को लक्षित कर रहे हैं, तो आपका आवेदन स्थापित समय पर सभी अनुमतियों का अनुरोध करेगा, जैसा कि मार्शमैलो के नीचे एक ओएस चलाने वाले किसी भी उपकरण पर होगा। यदि आप एमुलेटर पर कोशिश कर रहे हैं तो एंड्रॉइड 6.0 से आपको स्पष्ट रूप से सेटिंग्स-> ऐप्स-> YourAPP -> अनुमतियों पर जाने की आवश्यकता है और यदि आपने कोई दिया है तो अनुमति को बदल दें।


2
अविश्वसनीय, मैंने यह पता लगाने की कोशिश में 2 दिन बिताए। हर बार मुझे लगता है कि एंड्रॉइड पर चीजें आसानी से चल रही हैं, ऐसा कुछ होता है।
Jaime इवान Cervantes

7

अजीब तरह से एक स्लैश डालने के बाद "/" मेरे newFile से पहले मेरी समस्या हल हो गई थी। मैंने इसे बदल दिया:

File myFile= new File(Environment.getExternalStorageDirectory() + "newFile");

इसके लिए:

File myFile= new File(Environment.getExternalStorageDirectory() + "/newFile");

1
यहां कुछ भी अजीब नहीं है। पहली पंक्ति के साथ आप उसी निर्देशिका में एक फ़ाइल बनाने का प्रयास कर रहे हैं जिसमें आपकी बाह्य संग्रहण निर्देशिका है। अर्थात /storage/.../somethingnewfile के बजाय /storage/.../something/newfile
स्टीफन

@ स्टीफन यदि आप उत्तर की व्यापक श्रेणी को देखते हैं तो त्रुटि स्वयं अजीब है।
दारुश

3
ऐसा करने का सही तरीका फ़ाइल (dir, फ़ाइल) cosntructor का उपयोग करना है
निक

@NickCardoso आप फ़ाइल (स्ट्रिंग पथनाम) का भी उपयोग कर सकते हैं। लगता है कि आपको यहाँ बात नहीं मिल रही है। सवाल यह नहीं है कि फाइल क्लास का उपयोग कैसे किया जाए। इस थ्रेड में उत्तरों की श्रेणी से पता चलता है कि यह त्रुटि कितनी भ्रामक है और इसे हल करने के कितने संभव तरीके हैं। मेरे मामले में त्रुटि गायब स्लैश थी। कुछ लोगों ने इसे उपयोगी पाया है। सुनिश्चित करें कि आप किसी फ़ाइल तक पहुँचने के अपने तरीके का उपयोग कर सकते हैं। आगे बढ़ो और अपना उत्तर पोस्ट करो। यह किसी की समस्या को हल कर सकता है।
दारुश

आपको बात नहीं मिल रही है। यदि आप सही कंस्ट्रक्टर का उपयोग करते हैं, तो आपके हैक की आवश्यकता नहीं है। मेरी टिप्पणी को जोड़ा गया था ताकि यह भविष्य के पाठकों को आपकी गलती से गुमराह करने में मदद कर सके। यह एक व्यक्तिगत आलोचना नहीं थी और इसे एक उत्तर की आवश्यकता नहीं थी
निक कार्डसो

6

मुझे भी यही समस्या थी और किसी भी सुझाव से मदद नहीं मिली। लेकिन मुझे इसका एक दिलचस्प कारण मिला, एक भौतिक उपकरण, गैलेक्सी टैब पर

जब USB संग्रहण चालू होता है, बाहरी संग्रहण पढ़ने और लिखने की अनुमति देता है तो कोई प्रभाव नहीं पड़ता है। बस USB संग्रहण बंद करें, और सही अनुमतियों के साथ, आपके पास समस्या हल हो जाएगी।


2
लानत है, मैं बस 3 घंटे के आसपास काम करने की तरह बिताया। आखिरकार, मुझे डिवाइस को रिबूट करना पड़ा और इसने काम किया। बहुत बहुत धन्यवाद
crgarridos

5

मैं /data"आंतरिक भंडारण" से संबंधित सभी चीजों की अपेक्षा करूंगा । हालाँकि, आपको लिखने में सक्षम होना चाहिए /sdcard


5
मैंने <उपयोग-अनुमति Android: name = "android.permission.WRITE_INTERNAL_STORAGE" /> भी आज़माया। अब भी वही।
मर्ट

1
/ डेटा-विभाजन आम तौर पर साधारण (गैर-रूट) उपयोगकर्ताओं के लिए लिखा-संरक्षित होता है जो साधारण फ़ाइल एक्सेस की कोशिश कर रहे हैं। आंतरिक भंडारण के लिए, ऐसा करने के लिए विशेष तरीके हैं, खासकर यदि आप डेटाबेस का उपयोग करना चाहते हैं। Android डेवलपर पृष्ठों इस मुद्दे पर आप की मदद करनी चाहिए।
ओवन

5

/system/etc/permission/platform.xml
नीचे दिए गए अनुसार अपने और समूह में एक अनुमति संपत्ति को बदलें ।

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    <group android:gid="sdcard_rw" />
    <group android:gid="media_rw" />    
</uses-permission>

platform.xml को सही तरीके से लॉक किया गया है, इसे adb खोल के माध्यम से प्रयास किया जाता है, लेकिन ADB को स्क्रिप्ट के लिए उपयोग करने की जो भी स्क्रिप्ट चाहिए वह चाहिए।
जॉन

असफल। मेरे डिवाइस को बूट लूप में डालें।
तोबसे

5

मुझे वही त्रुटि हुई जब गैलेक्सी एस 5 (एंड्रॉइड 6.0.1) पर डीसीआईएम / कैमरा फ़ोल्डर में एक छवि लिखने की कोशिश कर रहा था और मुझे लगा कि केवल यह फ़ोल्डर प्रतिबंधित है। मैं बस DCIM / किसी भी फ़ोल्डर में लिख सकता हूँ, लेकिन कैमरे में नहीं। यह ब्रांड आधारित प्रतिबंध / अनुकूलन होना चाहिए।


4

जब आपका एप्लिकेशन सिस्टम एप्लिकेशन के अंतर्गत आता है, तो वह SD कार्ड तक नहीं पहुंच सकता है।


4

ध्यान रखें कि भले ही आप मेनिफ़ेस्ट में सभी सही अनुमतियाँ सेट करते हों: केवल 3 पार्टी ऐप्स को आपके बाहरी कार्ड पर लिखने की अनुमति होती है, जिन्हें "अपनी निर्देशिका" (यानी / sdcard / Android / data /) लिखने की कोशिश की जाती है कहीं और: आपको अपवाद मिलेगा: EACCES (अनुमति अस्वीकृत)


3

शायद इसका उत्तर यह है:

एपीआई पर = 23 डिवाइस, यदि आप एप्लिकेशन इंस्टॉल करते हैं (ऐप सिस्टम ऐप नहीं है), तो आपको "सेटिंग - एप्लिकेशन" में भंडारण की अनुमति की जांच करनी चाहिए, हर ऐप के लिए अनुमति सूची है, आपको इसकी जांच करनी चाहिए! प्रयत्न


3

मेरे मामले में मैं एक फाइल पिकर लाइब्रेरी का उपयोग कर रहा था जिसने बाहरी भंडारण के लिए रास्ता लौटाया लेकिन यह शुरू हो गया /root/। और यहां तक ​​कि रनवे पर दी गई WRITE_EXTERNAL_STORAGE अनुमति के बाद भी मुझे त्रुटि EACCES (अनुमति अस्वीकृत) मिली ।
इसलिए Environment.getExternalStorageDirectory()बाहरी भंडारण के लिए सही रास्ता पाने के लिए उपयोग करें।

उदाहरण:
नहीं लिख /root/storage/emulated/0/newfile.txt
सकते हैं: लिख सकते हैं: /storage/emulated/0/newfile.txt

boolean externalStorageWritable = isExternalStorageWritable();
File file = new File(filePath);
boolean canWrite = file.canWrite();
boolean isFile = file.isFile();
long usableSpace = file.getUsableSpace();

Log.d(TAG, "externalStorageWritable: " + externalStorageWritable);
Log.d(TAG, "filePath: " + filePath);
Log.d(TAG, "canWrite: " + canWrite);
Log.d(TAG, "isFile: " + isFile);
Log.d(TAG, "usableSpace: " + usableSpace);

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

आउटपुट 1:

externalStorageWritable: true
filePath: /root/storage/emulated/0/newfile.txt
isFile: false
usableSpace: 0

आउटपुट 2:

externalStorageWritable: true
filePath: /storage/emulated/0/newfile.txt
isFile: true
usableSpace: 1331007488

मुझे वही सटीक समस्या हो रही थी। को हटानाroot पथ से भाग मेरी समस्या का समाधान।
xabush


3

खोज परिणामों से यहां आने वाले किसी भी व्यक्ति के लिए और एंड्रॉइड 10 को लक्षित कर रहे हैं: एंड्रॉइड 10 (एपीआई 29) भंडारण से संबंधित कुछ अनुमतियों को बदलता है।

जब मैंने अपने पिछले उदाहरणों Environment.getExternalStorageDirectory()(जो कि एपीआई 29 के साथ पदावनत हो गए हैं) को बदल दिया तो मैंने इस मुद्दे को ठीक कर लियाcontext.getExternalFilesDir(null)

ध्यान दें कि context.getExternalFilesDir(type) यदि संग्रहण स्थान उपलब्ध नहीं है, तो अशक्त हो सकता है, इसलिए यह जांचना सुनिश्चित करें कि जब भी आप बाहरी अनुमतियाँ हों तो जाँच लें।

और अधिक पढ़ें यहाँ


2

मैं / init.rc में डेटा / के तहत एक फ़ोल्डर बना रहा हूँ (नेक्सस 7 पर उपकरण के साथ चारों ओर mucking) और वास्तव में इस समस्या थी।

यह पता चला कि फ़ोल्डर rw (666) की अनुमति देना पर्याप्त नहीं था और इसे rwx (777) होना था, फिर सभी ने काम किया!


2

यदि आपके पास इन एडीबी कमांड के माध्यम से एक रूटेड डिवाइस है, तो स्टोरेज अनुमतियों के 6.0 प्रवर्तन को दरकिनार किया जा सकता है:

root@msm8996:/ # getenforce
getenforce
Enforcing
root@msm8996:/ # setenforce 0
setenforce 0
root@msm8996:/ # getenforce
getenforce
Permissive

1

प्रकट में अनुमति जोड़ें।

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

3
कोई अनुमति नहीं हैandroid.permission.READ_INTERNAL_STORAGE
रयान आर

0

मुझे एक ही समस्या थी (एपीआई> = 23)।

समाधान https://stackoverflow.com/a/13569364/1729501 ने मेरे लिए काम किया, लेकिन डिबगिंग के लिए ऐप को डिस्कनेक्ट करना व्यावहारिक नहीं था।

मेरा समाधान विंडोज पर उचित एडीबी डिवाइस ड्राइवर स्थापित करना था। Google USB ड्राइवर ने मेरे डिवाइस के लिए काम नहीं किया।

चरण 1: अपने डिवाइस ब्रांड के लिए एडीबी ड्राइवर डाउनलोड करें।

चरण 2: डिवाइस मैनेजर पर जाएं -> अन्य डिवाइस -> "adb" शब्द के साथ प्रविष्टियां देखें -> अपडेट ड्राइवर का चयन करें -> चरण 1 में स्थान दें



0

जोड़ निर्भरता जोड़ें

implementation 'com.karumi:dexter:4.2.0'

अपनी मुख्य गतिविधि में नीचे कोड जोड़ें।

import com.karumi.dexter.Dexter;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {


                checkMermission();
            }
        }, 4000);
    }

    private void checkMermission(){
        Dexter.withActivity(this)
                .withPermissions(
                        android.Manifest.permission.READ_EXTERNAL_STORAGE,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        android.Manifest.permission.ACCESS_NETWORK_STATE,
                        Manifest.permission.INTERNET
                ).withListener(new MultiplePermissionsListener() {
            @Override
            public void onPermissionsChecked(MultiplePermissionsReport report) {
                if (report.isAnyPermissionPermanentlyDenied()){
                    checkMermission();
                } else if (report.areAllPermissionsGranted()){
                    // copy some things
                } else {
                    checkMermission();
                }

            }
            @Override
            public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                token.continuePermissionRequest();
            }
        }).check();
    }

0

मेरे मामले में त्रुटि लाइन पर दिखाई दे रही थी

      target.createNewFile();

चूंकि मैं एसडी कार्ड पर एक नई फ़ाइल नहीं बना सका, इसलिए मुझे डॉक्यूमेंटफाइल दृष्टिकोण का उपयोग करना पड़ा।

      documentFile.createFile(mime, target.getName());

उपरोक्त प्रश्न के लिए इस समस्या को हल किया जा सकता है,

    fos=context.getContentResolver().openOutputStream(documentFile.getUri());

यह थ्रेड भी देखें, एंड्रॉइड 5.0 (लॉलीपॉप) के लिए प्रस्तुत नए एसडी कार्ड एक्सेस एपीआई का उपयोग कैसे करें?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.