Da ich meine App zu Android N mit FileProvider migriert habe, kann ich meine Bilder in der Galerie des Telefons (auch mit der Version unter Android N) nicht sehen. Also habe ich eine kleine Test-App erstellt, um dies zu debuggen, ohne Erfolg.Kann nicht speichern in Galerie nach dem Bild mit FileProvider
In meinem Manifest
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
<application
...>
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"></meta-data>
</provider>
</application>
In file_paths.xml
<paths>
<external-files-path
name="test_images"
path="Pictures/TestPictures"/>
</paths>
Und machte ich eine kleine Aktivität, die zuletzt aufgenommene Bild zeigt, um sicherzustellen, dass URI korrekt ist:
private final static int REQUEST_CAMERA = 1102;
public static final String CAMERA_IMAGES_DIR = "TestPictures";
String mOutputFilePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onCamera();
}
});
}
public void onCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
File photoFile = createImageFile();
Uri photoURI = FileProvider.getUriForFile(this,
getPackageName() + ".fileprovider",
photoFile);
mOutputFilePath = photoFile.getAbsolutePath();
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(intent, REQUEST_CAMERA);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CAMERA)
onCaptureImageResult();
}
private void onCaptureImageResult() {
if (mOutputFilePath != null) {
File f = new File(mOutputFilePath);
Uri finalUri = Uri.fromFile(f);
galleryAddPic(finalUri);
((ImageView) findViewById(R.id.imageView)).setImageURI(finalUri);
}
}
public File createImageFile() {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), CAMERA_IMAGES_DIR + "/");
if (!storageDir.exists())
storageDir.mkdir();
return new File(storageDir, imageFileName + ".jpg");
}
private void galleryAddPic(Uri contentUri) {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, contentUri);
sendBroadcast(mediaScanIntent);
}
Mein Bild ist in meiner App und in meinem Dateibrowser wie erwartet, aber ich kann es nicht in der Fotogalerie sehen. Ich habe versucht, FileProvider Uri zu verwenden, das funktioniert auch nicht.
https://stackoverflow.com/questions/32789157/how-to-write-files-to-external-public-storage-in-android-so- that-this-are-visibl – CommonsWare
Der Weg, um mein Foto in der Galerie hinzuzufügen, war nicht das Problem, aber ich bemerkte das Verzeichnis in dem Thread, den Sie freigegeben haben, und es hilft mir, die Lösung zu finden, thx. – Silwek