Ich versuche, ein zugeschnittenes Bild in den internen Speicher zu schreiben Permision denied
.
Hier ist die Absicht:
Intent photoPickerIntent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra("aspectX", 1);
photoPickerIntent.putExtra("aspectY", 1);
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getBackgroundUri());
photoPickerIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, ActivityCrop);
Hier ist der URI der Datei:
06-25 21:27:46.644: W/GenPrefsFragment(10251): getBackgroundUri(): file:///data/data/de.dawnkeeper.androidwall/background.jpg
und hier ist der fehler:
06-25 21:17:30.238: W/CropImage(9001): cannot write output
06-25 21:17:30.238: W/CropImage(9001): java.io.FileNotFoundException: Permission denied
06-25 21:17:30.238: W/CropImage(9001): at android.os.Parcel.openFileDescriptor(Native Method)
06-25 21:17:30.238: W/CropImage(9001): at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:117)
Soweit ich weiß, ist keine Berechtigung zum Zugriff auf den internen Speicher erforderlich.
Was vermisse ich?
Gibt es einen besseren Weg, um dieses Problem zu lösen?
bearbeiten
Ich habe inzwischen eine Lösung gefunden. Wenn ich die Datei erst erstellt habe, bevor der Intent gestartet wurde und verwende file.setWritable(true,false)
die Absicht wirkt wie .. beabsichtigt.
Ich akzeptiere immer noch die Antwort von Hans Kratz, da dies eine sauberere Lösung ist.
Antworten:
1 für die Antwort № 1Sie können keinen internen Speicher verwenden, da der Media Store Content Provider nicht in den privaten Speicherplatz Ihrer App schreiben kann getBackgroundUri()
einen Pfad zum externen Speicher zurückgeben, z. so etwas wie Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "test.jpg"))