【发布时间】:2020-02-08 18:22:12
【问题描述】:
我的目标是通过相机应用拍照并将其保存到目录中。就像本教程解释的一样:https://developer.android.com/training/camera/photobasics
但是,onActivityResult 在某些设备上返回 -1 作为返回码。 问题很可能是相机应用无法将照片文件写入我提供的 URI,但我不明白为什么。
这是我的测试结果:
- 带有 Android 7 的 Moto G:运行良好
- 搭载 Android 7.1 的小米米 A1:失败
- 搭载 Android 9 的三星 Galaxy A40:失败
这是我的工作:
在清单中声明提供者(连同适当的权限)
<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>
在 Activity 中,使用 Intent 启动相机应用
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)
}
}
}
}
【问题讨论】:
-
代替 external-path,尝试
-
@AlexCohn 我仍然有同样的问题
-
等一下……
RESULT_OK == -1‼ -
你是对的,做得好:)。我的问题不是因为 resultCode 等于-1。这是因为 resultData 为空。 stackoverflow.com/questions/9890757/… 帮助我处理了这个空结果数据。你让我走上正轨。我会接受你的回答。
标签: android android-intent camera android-fileprovider