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.
https://android-developers.de/…ht=FileProvider#post20618
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