在我的應用程序中,用戶可以在他的外部存儲器中保存截圖和文件。但是當外部存儲不可寫入時我該怎麼辦?將我的設備從棒棒糖更新爲棉花糖時遇到此問題。當我試圖保存屏幕截圖時,SD卡沒有被我的應用程序識別。但它可以通過ES Filex Explorer訪問,但是隻讀!不應該有一部分內部存儲在每個設備上保留爲「外部」存儲?爲什麼這不起作用?Android外部存儲手柄不可用
P.S.當外部存儲器可寫入時,代碼運行良好!
那是我的代碼:
Bitmap bitmap = getScreenshotFromRecyclerView(recyclerView);
File file = storeImage(bitmap, name);
if(file != null){
Toast.makeText(this, getString(R.string.screenshotSaved, name), Toast.LENGTH_LONG).show();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(file.toURI().toString()), "image/*");
startActivity(intent);
}else{
Toast.makeText(this, getString(R.string.notAvailable), Toast.LENGTH_LONG).show();
}
private File storeImage(Bitmap image, String name) {
File pictureFile = getOutputMediaFile(name);
if (pictureFile == null) {
System.out.println("Error A");
}else{
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
image.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.close();
} catch (FileNotFoundException e) {
System.out.println("Error B");
} catch (IOException e) {
System.out.println("Error C");
}
}
return pictureFile;
}
private File getOutputMediaFile(String name){
File mediaStorageDir = new File(new Helper(this).getPathToAppFolder());
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
return null;
}
}
// Create a media file name#
File mediaFile;
if(!name.equals(getString(R.string.training))){
String timeStamp = new SimpleDateFormat("dd.MM.yyyy_HH:mm", Locale.getDefault()).format(new Date());
String mImageName= name + "_" + timeStamp + ".jpg";
mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
}else{
String mImageName= name + ".jpg";
mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
}
return mediaFile;
}
每個設備都有外部存儲器。並且每個應用程序都可以使用清單中請求的寫入外部存儲權限寫入它。如果你添加一個微型SD卡,然後在這個可移動存儲器上,大多數情況下都不能寫入。它不清楚你在說什麼。 – greenapps
'用戶可以將截圖和文件保存在他的外部存儲中。是嗎?沒有人可以檢查你的代碼,因爲我們不知道'new Helper(this).getPathToAppFolder()'提供了什麼。 – greenapps
棒棒糖效果很好。 public String getPathToAppFolder(){ return Environment.getExternalStorageDirectory()+「/ Android/data /」+ context.getPackageName()+「/ Files /」; } – XxGoliathusxX