एंड्रॉइड 4.4 किटकैट के बाद, और 2017 के एंड्रॉइड 4.4 के शेयर के रूप में और लगभग 20% कम और कम हो रहा है, File
वर्ग और getExternalStorageDirectory()
विधि का उपयोग करके एसडी कार्ड को सहेजना संभव नहीं है । यह विधि आपके डिवाइस की आंतरिक मेमोरी और छवियों को हर ऐप में दिखाई देती है। आप छवियों को केवल अपने ऐप पर ही निजी रूप से सहेज सकते हैं और जब उपयोगकर्ता आपके ऐप को हटाता है तो उसे हटा दिया जा सकता हैopenFileOutput()
विधि से ।
एंड्रॉइड 6.0 के साथ शुरू करके, आप अपने एसडी कार्ड को एक आंतरिक मेमोरी के रूप में, लेकिन केवल अपने डिवाइस के लिए निजी रूप में प्रारूपित कर सकते हैं। (यदि आप एसडी कार को आंतरिक मेमोरी के रूप में प्रारूपित करते हैं, तो केवल आपका डिवाइस एक्सेस कर सकता है या इसे देख सकता है) आप उस एसडी कार्ड का उपयोग करके बचा सकते हैं अन्य उत्तर लेकिन यदि आप एक हटाने योग्य एसडी कार्ड का उपयोग करना चाहते हैं तो आपको नीचे दिए गए मेरे उत्तर को पढ़ना चाहिए।
आपको उपयोगकर्ता द्वारा चयनित फ़ोल्डर प्राप्त करने के लिए यूआरआई प्राप्त करने के लिए संग्रहणonActivityResult
विधि फ्रेमवर्क का उपयोग करना चाहिए , और उपयोगकर्ता द्वारा डिवाइस को पुनरारंभ करने के बाद फ़ोल्डर तक पहुंचने में सक्षम होने के लिए पुन: उपयोग करने योग्य अनुमति जोड़ें।
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
// selectDirectory() invoked
if (requestCode == REQUEST_FOLDER_ACCESS) {
if (data.getData() != null) {
Uri treeUri = data.getData();
tvSAF.setText("Dir: " + data.getData().toString());
currentFolder = treeUri.toString();
saveCurrentFolderToPrefs();
// grantUriPermission(getPackageName(), treeUri,
// Intent.FLAG_GRANT_READ_URI_PERMISSION |
// Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
final int takeFlags = data.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// Check for the freshest data.
getContentResolver().takePersistableUriPermission(treeUri, takeFlags);
}
}
}
}
हर बार जब आप किसी छवि को सहेजना चाहते हैं तो फ़ोल्डर को सेव करने के लिए साझा वरीयताओं को बचाने के लिए उपयोगकर्ता को फ़ोल्डर का चयन करने के लिए न कहें।
आप का उपयोग करना चाहिए DocumentFile
अपनी छवि, नहीं बचाने के लिए वर्ग File
या ParcelFileDescriptor
अधिक जानकारी के लिए, आप जाँच कर सकते हैं इस सूत्र एसडी के साथ कार्ड के लिए छवि को बचाने के लिए compress(CompressFormat.JPEG, 100, out);
विधि और DocumentFile
वर्गों।
mImage.setImageBitmap(_result.getBitmap());
मेरेonTaskComplete()
कॉलबैक के माध्यम से इमेजव्यू में लोड करता हूं । मुझे अब उपयोगकर्ताओं को लंबे समय तक प्रेस संदर्भ मेनू के माध्यम से स्थानीय रूप से फ़ाइल को सहेजने की अनुमति देनी होगी। मुझे नीचे दिए गए समाधान का उपयोग करने में सक्षम होना चाहिए। हालांकि मैं क्या जानना चाहता हूं, क्या आपने इसके लिए एक बेहतर दृष्टिकोण की खोज की है?