В моем приложении пользователь может сохранять скриншоты и файлы во внешнем хранилище. Но что делать, если внешнее хранилище невозможно записать? У меня была эта проблема при обновлении моего устройства от леденца до зефира. SD-карта не получила признания от моего приложения, когда я попытался сохранить скриншот. Но это было доступно ES File Explorer, но ПРОЧИТАНО! Должна ли быть часть внутренней памяти, зарезервированная как «внешняя» память на каждом устройстве? Почему это не сработало?Android External storage handle недоступен
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;
}
Каждое устройство имеет внешнее хранилище. И каждое приложение может писать на него с разрешением на запись внешнего хранилища, запрошенным в манифесте. Если вы добавите карту micro SD, то на этом съемном носителе в основном невозможно писать. Его неясно, о чем вы говорите. – greenapps
'пользователь может сохранять скриншоты и файлы в своем внешнем хранилище'. Это? Никто не может проверить ваш код, поскольку мы не знаем, что «новый Помощник (это) .getPathToAppFolder()' поставляет. – greenapps
Он хорошо работал на леденец. public String getPathToAppFolder() { return Environment.getExternalStorageDirectory() + "/ Android/data /" + context.getPackageName() + "/ Files /"; } – XxGoliathusxX