【发布时间】:2019-01-14 11:01:26
【问题描述】:
我正在使用kotlin 打开相机,如下所示:
private fun dispatchTakePictureIntent() {
Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
// Create the File where the photo should go
val photoFile: File? = try {
activity?.createImageFile()
} catch (ex: IOException) {
Timber.e(ex)
null
}
// Continue only if the File was successfully created
photoFile?.also {
takenPhotoUri = FileProvider.getUriForFile(
requireContext(), "zz.zz.android.fileprovider", it
)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, takenPhotoUri)
startActivityForResult(takePictureIntent, REQUEST_CODE_FOR_PERFORM_CAMERA)
}
}
}
但是得到我下面的错误:
java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.sec.android.app.camera/.Camera launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } clip={text/uri-list U:content://zz.zz.android.fileprovider/zz_zz_chat_images/PNG_%DB%B2%DB%B0%DB%B1%DB%B9%DB%B0%DB%B1%DB%B1%DB%B4_%DB%B1%DB%B4%DB%B2%DB%B2%DB%B5%DB%B5_1904526976.png} (has extras) } from ProcessRecord{e956b7f 13929:zz.zz.android.dev/u0a1605} (pid=13929, uid=11605) with revoked permission android.permission.CAMERA
我正在使用来自intent 的打开相机。
这是我的onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
if (resultCode == Activity.RESULT_OK) {
when (requestCode) {
REQUEST_CODE_FOR_PERFORM_CAMERA -> takenPhotoUri?.let { uri ->
uri.getBitmpap(requireContext())?.let { bitmap ->
presenter.uploadImage(chatRoomId, "image/png", uri, bitmap, "")
}
}
}}
【问题讨论】:
-
如果您在这里阅读注释 - developer.android.com/reference/android/provider/… 基本上从 Android Marshmallow 权限模型有更改以获取更多详细信息,您可以查看 developer.android.com/guide/topics/permissions/… 因此在开始打开相机的意图之前,您需要检查权限是否是的确。对于测试,您可以进入设置->设备中应用程序的权限并切换相机权限。然后检查它不会崩溃
-
您不需要
CAMERA权限即可通过Intent拍照。但是,如果您确实在清单中列出了CAMERA权限,并在未授予该权限的情况下尝试这样做,则会抛出该异常。这样做是为了防止尝试在应用程序的设置中手动禁用该权限的最终用户产生混淆。只需从清单中删除CAMERA权限。您可能需要清理/重建您的项目,并且可能需要卸载/重新安装您的应用程序。
标签: android kotlin android-camera-intent