हम सिर्फ नई अनुमतियां कि Android 4.4 पर एसडी कार्ड (बाह्य भंडारण) करने के लिए फ़ाइलों लेखन (EACCES अनुमति अस्वीकृत)एंड्रॉयड किटकैट
किटकैट से पहले हम स्थापित करने के लिए लागू की बेईमानी से गिर गया है एसडी कार्ड पर 4.4 फ़ोल्डर हमारे इस तरह लिखने योग्य फ़ोल्डर:
mfolder = Environment.getExternalStorageDirectory().getPath() + "/Android/data/com.xyz.abc/appfiles";
:
mfolder = Environment.getExternalStorageDirectory().getPath() + "/appfiles";
हालांकि फ़ाइलें इस जरूरत के लेखन सक्षम करने के लिए 4.4 उपकरणों पर खोज कर रहा निष्कर्ष पर आए हैं, ठीक ही हो या गलत है कि घंटों के बाद
को परिवर्तित करने की
तो mfolder कुछ ऐसा होगा: /mnt/sdcard/Android/data/com.xyz.abc/appfiles
क्या यह सही है, क्या हम एसडीकार्ड पर ऊपर दिए गए फ़ोल्डर की तरह एक फ़ोल्डर बनाते हैं ताकि 4.4 डिवाइस सक्षम हो सकें फाइलें लिखो?
mfolder एक स्ट्रिंग है जिसे हम साझा प्राथमिकताओं में सहेजते हैं।
फिर हमारे पास यह कोड है जो एक बार चलाता है यदि API> = 19 जो mfolder स्ट्रिंग को बदलता है और फिर पुरानी फ़ोल्डर से सभी फ़ाइलों को नए 'किटकैट' फ़ोल्डर में कॉपी करता है।
if (android.os.Build.VERSION.SDK_INT>=19){
if (!mfolder.contains("/Android/data/com.xyz.abc/appfiles")){
if (prefs.getBoolean("kitkatcheck", false)==false){
//update mfolder from
// /mnt/sdcard/appfiles
// to
// /mnt/sdcard/Android/data/com.xyz.abc/appfiles
String prekitkatfolder = mfolder;
String kitkatfolder = mfolder.replace("/appfiles", "/Android/data/com.xyz.abc/appfiles");
mfolder = kitkatfolder;
try {
File sd = new File(mfolder);
if(!sd.exists() || !sd.isDirectory()) {
sd.mkdirs();
}
} catch (Exception e) {
Toast.makeText(getBaseContext(), "Error creating Kitkat folder!\n" + e.toString(), Toast.LENGTH_LONG).show();
return;
}
prefEditor.putString("patternfolder", mfolder);
prefEditor.putBoolean("kitkatcheck", true);
prefEditor.commit();
//copy files and folder from old appfiles folder to new.
AllFiles.clear();
listFilesAndFilesSubDirectories(prekitkatfolder);
if (AllFiles.size()>0){
for (File child : AllFiles) {
try {
File dest = new File(child.toString().replace(prekitkatfolder, kitkatfolder));
try {
String filePath = dest.getPath().substring(0, dest.getPath().lastIndexOf(File.separator));
File subfolder = new File(filePath);
if(!subfolder.exists() || !subfolder.isDirectory()) {
subfolder.mkdirs();
}
} catch (Exception ex) {
}
copyFile(child, dest);
} catch (Throwable t) {
}
}
}
}
}
मैं तो उपयोगकर्ता है कि उनके फ़ाइलों को नए फ़ोल्डर में कॉपी किया गया है और कहा कि नई अनुमतियों के कारण वे मैन्युअल रूप से पुराने prekitkatfolder फ़ोल्डर हटाना होगा सूचित करें। मुझे लगता है कि अगर वे एक स्टॉक फाइल मैनेजर हैं या यदि वे नई 4.4 अनुमतियों के कारण एसडी कार्ड को अनमाउंट करते हैं और इसे पीसी में रखते हैं तो वे केवल ऐसा करने में सक्षम होंगे?
इसके अलावा, हमारे लिए ऐसा लगता है कि ये 4.4 अनुमतियां किटकैट के साथ हमारे सभी उपयोगकर्ताओं को प्रभावित नहीं कर रही हैं। कुछ अभी भी अपने बाहरी भंडारण पर मूल फ़ोल्डर स्थान पर लिख सकते हैं और कुछ को EACCES (अनुमति अस्वीकृत) त्रुटि मिलती है। क्या कोई भी इस पर प्रकाश डाल सकता है कि यह क्यों हो सकता है, कोई सोचता है कि यह बाहरी भंडारण का उपयोग कर सभी 4.4 उपकरणों पर लागू होगा?
चूंकि हमारे पास कोई वास्तविक 4.4 डिवाइस नहीं है, इसलिए हमें एमुलेटर (एपीआई 1 9) का उपयोग करके इस कोड का परीक्षण करना होगा, लेकिन हमें ईएसीसीईएस अनुमति अस्वीकृत त्रुटि नहीं मिलती है। इसलिए हमने ऊपर दिए गए कोड के साथ बीटा संस्करण जारी किया है और बताया गया है कि कॉपी की गई फाइलें आंतरिक स्टोरेज में समाप्त हो गईं, यह कैसे हो सकती है?
कोई भी विचार है कि हम गलत क्या कर रहे हैं, अग्रिम
हाय ज़ोरैक, मैं कुछ डिवाइसों पर एक समान स्थिति में हूं, यह पथ में पैकेज नाम के बिना काम करता है और कुछ लोगों को आपको /Android/data/com.xyz.abc/appfiles जैसे लंबे पथ की आवश्यकता होती है, यह सुनिश्चित नहीं है कि क्या हो रहा है । क्या आपको अभी तक कोई समाधान मिला है? – Ahmed