Hallo,
ich habe ein Problem mit dem FileProvider.
Ich habe zuerst versucht das Bild im Internen Speicher der App zu speichern, bis ich hier gelesen habe das es nicht geht.
Beitrag
Hallo zusammen,
ich habe folgendes Problem: Ich möchte, dass eins mit der Kamera geschossenes Foto im internal Storage meiner App abgespeichert wird. Die Kamera App hat jedoch keine Schreibrechte in meinen Ordner zu schreiben, daher benutze ich einen FileProvider um mit einer URI den Zugriff zu erlauben. In der Android Doku wird es so beschrieben. Jedoch funktioniert das nicht. Der Einzige Unterschied zum Beispiel aus der Android Doku ist, dass dort " File storageDir =…
Chriscologne
9. Juni 2017 um 16:36
Jetzt versuche ich das Bild auf der sdcard zu speichern, ohne das es in der Gallerie landet.
Ich habe dieses Beispiel befolgt: https://developer.android.com/training/camera/photobasics
Der este Part funktioniert auch bei mir, also ich starte die Kamera und habe in onActivityResult zugriff auf das Bitmap.
Nur landet hier auch ein Bild in der Gallerie, das möchte ich aber nicht, das Bild soll nur in der App sichtbar sein.
Also habe ich den Part Save the full-size photo im Beispiel getestet. (Mit FileProvider)
Ich bekomme aber immer diese Meldung (wird in FileProvider.getUriForFile ausgelöst):
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/de.domain.app/files/bilder/jpeg_20180727_140424_2091066294.jpg
Die Kamera startet aus einem Fragment.
Hier mein Code:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
....
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="de.domain.app.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
Alles anzeigen
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="bilder" path="Android/data/de.domain.app/files" />
</paths>
protected void BildAufnehmen()
{
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getContext().getPackageManager()) != null)
{
File photoFile = null;
try
{
photoFile = createImageFile();
}
catch (Exception e)
{
e.getStackTrace();
}
if (photoFile != null)
{
try
{
Uri photoURI = FileProvider.getUriForFile(getActivity(),
"de.domain.app.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, 101);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
private File createImageFile()
{
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "jpeg_" + timeStamp + "_";
File storageDir = getActivity().getExternalFilesDir("bilder");
if (!storageDir.exists())
{
if (!storageDir.mkdirs())
{
return null;
}
}
File image = null;
try
{
image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
}
catch (IOException e)
{
e.printStackTrace();
}
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
Alles anzeigen
Gruss Eddi