Моя цель - сделать снимок с помощью приложения камеры и сохранить его в каталоге. Как и в этом руководстве объясняется: https://developer.android.com/training/camera/photobasics
Однако onActivityResult возвращает -1 в качестве кода возврата на некоторых устройствах. Скорее всего, проблема в том, что приложение камеры не может записать файл фотографии в предоставленный мною URI, но я не понимаю, почему.
Вот результаты моих тестов:
- Moto Gс Android 7: работает нормально
- Xiaomi Mi A1 с Android 7.1: не работает
- Samsung Galaxy A40 с Android 9: не работает
Вот что я делаю:
Объявите провайдера в манифесте (вместе с соответствующими разрешениями)
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.mypackage.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
Объявите правильный путь к файлу
<paths>
<external-path name="my_images" path="Android/data/com.mypackage/files/Pictures" />
</paths>
В действии запустите приложение камеры с намерением
Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
takePictureIntent.resolveActivity(requireContext().packageManager)?.also {
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.FRANCE).format(Date())
requireContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES)?.let { storageDir ->
File.createTempFile("JPEG_${timeStamp}_", ".jpg", storageDir).also {
fileUri = FileProvider.getUriForFile(requireContext(), "com.mypackage.fileprovider", it)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri)
startActivityForResult(takePictureIntent, TAKE_PIC_CODE)
}
}
}
}