15

का उपयोग कर कैसे लिखने के लिए (और नाम बदलने) एसडी कार्ड में एक फ़ाइल (एंड्रॉयड 5 और ऊपर) के बारे में निष्कर्ष की एक बहुत कुछ करने के बाद अनुमति, मुझे लगता है कि नए एंड्रॉयड द्वारा प्रदान की एसएएफ हो जाएगा एसडी कार्ड फ़ाइल लिखने के लिए उपयोगकर्ता से अनुमति लेने की आवश्यकता है।एंड्रॉयड एसडी कार्ड लिखने एसएएफ (संग्रहण एक्सेस फ़्रेमवर्क)

मैंने इस फ़ाइल प्रबंधक एप्लिकेशन ईएस फ़ाइल एक्सप्लोरर में देखा है जो प्रारंभ में चित्रों में दिखाए गए अनुसार निम्न तरीके से पढ़ने और लिखने की अनुमति लेता है।

enter image description here

Picture 2

एसडी कार्ड चुनने के बाद, लिखने की अनुमति दी जाती है।

तो उसी तरह से मैं एसएएफ का उपयोग करने की कोशिश की है, लेकिन एक फ़ाइल का नाम बदलने में विफल रहा है। मेरा कोड:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    rename = (Button) findViewById(R.id.rename); 

    startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42); 
} 

@Override 
public void onActivityResult(int requestCode,int resultCode,Intent resultData) { 
    if (resultCode != RESULT_OK) 
     return; 
    Uri treeUri = resultData.getData(); 
    DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri); 
    grantUriPermission(getPackageName(), treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
    getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
} 

public void renameclick(View v) { 
    File ff = new File("/storage/sdcard1/try1.jpg"); 
    try { 
     ff.createNewFile(); 
    } catch (Exception e) { 
     Log.d("error", "creating"); 
     e.printStackTrace(); 
    } 
} 

अभी भी कोड चलाने के बाद मुझे EAacces अनुमति अस्वीकार कर दी गई है।

उत्तर

17

फाइल सिस्टम के माध्यम से उपयोगकर्ता चुनें "एसडी कार्ड" या फिर "मोबाइल संग्रहण" एसएएफ जड़ इसी भंडारण करने के लिए अपने आवेदन पहुँच दे दे, लेकिन केवल एसएएफ एपीआई के माध्यम से, सीधे नहीं। उदाहरण के लिए आप कोड की तरह कुछ में अनुवाद किया जा सकता है:

public void writeFile(DocumentFile pickedDir) { 
    try { 
     DocumentFile file = pickedDir.createFile("image/jpeg", "try2.jpg"); 
     OutputStream out = getContentResolver().openOutputStream(file.getUri()); 
     try { 

      // write the image content 

     } finally { 
      out.close(); 
     } 

    } catch (IOException e) { 
     throw new RuntimeException("Something went wrong : " + e.getMessage(), e); 
    } 
} 

Android के हाल के संस्करण में, अपने अनुप्रयोग का उपयोग java.io.File लगभग पूरी तरह से हटा दिया गया है बाहर डेटा तक पहुँचने।

+0

लेकिन तब जब भी मैं एक फ़ाइल बनाने या नाम बदलने की आवश्यकता, एसएएफ पिकर –

+2

खुल जाएगा ट्री यूआरआई है, तो आप कुछ भी आप फ़ाइलों और निर्देशिकाओं यह भी शामिल है के साथ चाहते हैं कर सकते हैं। आपको प्रत्येक बार उपयोगकर्ता से पूछने की आवश्यकता नहीं है यदि 1) आप 'टेकपर्सिस्टेबल यूरीप्रमिशन()' और 2) का उपयोग करते हैं, तो आप कहीं यूआरआई स्टोर करते हैं, ताकि आप इसे एप्लिकेशन स्टार्टअप – bwt

+0

पर पुनर्प्राप्त कर सकें। धन्यवाद –

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