Android 4.4 Kitkat'tan sonra ve 2017 itibariyle Android 4.4 ve daha düşük olanların payı yaklaşık% 20 ve azalıyor, Filesınıf ve getExternalStorageDirectory()yöntem kullanarak SD karta kaydetmek mümkün değil . Bu yöntem, cihazınızın dahili belleğini döndürür ve görüntüler her uygulama tarafından görülebilir. Ayrıca görüntüleri yalnızca uygulamanıza özel olarak kaydedebilir ve kullanıcı uygulamanızı openFileOutput()yöntemle sildiğinde silinir .
Android 6.0 ile başlayarak, SD kartınızı dahili bir bellek olarak biçimlendirebilirsiniz, ancak yalnızca cihazınıza özel olarak biçimlendirebilirsiniz. (SD arabayı dahili bellek olarak biçimlendirirseniz, yalnızca cihazınız içeriğine erişebilir veya içeriğini görebilir) Bu SD karta kaydedebilirsiniz diğer cevaplar, ancak çıkarılabilir bir SD kart kullanmak istiyorsanız aşağıdaki cevabımı okumalısınız.
Klasör kullanıcı tarafından seçilen klasörü almak için klasör yöntemine uri almak için Depolama Erişimi Çerçevesi'ni kullanmalı onActivityResultve kullanıcı aygıtı yeniden başlattıktan sonra klasöre erişebilmek için kalıcı izin izni eklemelisiniz.
@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);
}
}
}
}
Şimdi, her görüntü kaydetmek istediğinizde kullanıcıdan klasör seçmesini istememek için kaydetme klasörünü paylaşılan tercihlere kaydedin.
Sen kullanmalıdır DocumentFilegörüntünüzü değil, kurtarmak için sınıf Fileveya ParcelFileDescriptorkontrol edebilirsiniz daha fazla bilgi için, bu konu ile SD karta görüntü kaydetmek için compress(CompressFormat.JPEG, 100, out);yöntem ve DocumentFilesınıflar.
mImage.setImageBitmap(_result.getBitmap());benim deonTaskComplete()callback'inde. Artık kullanıcıların uzun basın bağlam menüsü aracılığıyla dosyayı yerel olarak kaydetmelerine izin vermem gerekiyor. Aşağıdaki çözümü kullanabilmeliyim. Ne bilmek istiyorum, buna daha iyi bir yaklaşım buldunuz mu?