/ / Schreiben in den internen Speicher mit Absicht - Android, Android-Absicht

Mit Absicht in den internen Speicher schreiben - Android, Android-Intent

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 № 1

Sie 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"))