Ошибка пути при сохранении и отображении изображения в Android
Это может быть моей глупостью при написании путей, но вот мой код, и он не может найти настроенный root. getUriForFile является причиной ошибок.
@Override
public void onClick(View v) {
if (v.getId() == R.id.main_activity_camera_access_button) {
Log.d(TAG, "clicked");
Toast.makeText(getContext(), R.string.first_activity_toast_opening_camera, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(intent.resolveActivity(getActivity().getPackageManager()) != null) {
mPhotoFile = null;
try {
mPhotoFile = createImageFile();
} catch (IOException ex) {
Log.d(TAG, "exception while creating photo file");
}
if(mPhotoFile != null){
mfileUri = FileProvider.getUriForFile(getContext(), "edu.lclark.imagineyourwall.fileprovider", mPhotoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mfileUri); // set the image file name
// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
}
//mfileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
}
}
У меня есть каталог xml под res, и там есть мой my_paths.xml. Вот код для my_paths.xml.
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images"
path="Android/data/edu.lclark.imagineyourwall.name/files/Pictures" />
</paths>
Кроме того, мой манифест выглядит так, по крайней мере, часть провайдера.
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="edu.lclark.imagineyourwall.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/my_paths"></meta-data>
</provider>
1 ответ
Я думаю, что вы следуете документации для разработчиков Android для этого права? Если вы не нацелены на Android N (Nougat), можно удалить getUriForFile
линия и изменитьintent.putExtra(MediaStore.EXTRA_OUTPUT, mfileUri)
в intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mPhotoFile))
,
Согласно документации разработчика Android;
Для более новых приложений, ориентированных на Android N и выше, передача URI file: // через границу пакета вызывает исключение FileUriExposedException. Поэтому теперь мы представляем более общий способ хранения изображений с использованием FileProvider.