In meiner App kann der Benutzer Screenshots und Dateien in seinem externen Speicher speichern. Aber was soll ich tun, wenn der externe Speicher nicht beschreibbar ist? Ich hatte dieses Problem, wenn ich mein Gerät von Lollipop zu Marshmallow aktualisiere. Die SD-Karte wurde von meiner App nicht erkannt, als ich versuchte, einen Screenshot zu speichern. Aber es war zugänglich durch ES Filex Explorer aber READ-ONLY! Sollte es einen Teil des internen Speichers geben, der auf jedem Gerät als "externer" Speicher reserviert ist? Warum hat das nicht funktioniert?Android External Storage Handle Nichtverfügbarkeit
P.S. Der Code funktioniert gut, wenn externer Speicher schreibbar ist!
Das ist mein Code:
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;
}
Jedes Gerät verfügt über externen Speicher. Und jede App kann mit der in Manifest angeforderten Berechtigung zum Schreiben externer Speicher schreiben. Wenn Sie eine Micro-SD-Karte hinzufügen, ist auf diesem Wechselspeicher meist kein Schreiben möglich. Es ist unklar, wo du sprichst. – greenapps
'Benutzer kann Screenshots und Dateien in seinem externen Speicher speichern '. Ist es? Niemand kann deinen Code überprüfen, da wir nicht wissen, was 'new Helper (this) .getPathToAppFolder()' liefert. – greenapps
Es funktionierte gut auf Lutscher. public String getPathToAppFolder() { Rückgabe Environment.getExternalStorageDirectory() + "/ Android/data /" + context.getPackageName() + "/ Files /"; } – XxGoliathusxX