Android - 撤销权限 android.permission.CAMERA

标签 android kotlin android-camera-intent

我正在用 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, "")
                    }
                }
}}

最佳答案

在 list 中使用相机权限

<uses-permission android:name="android.permission.CAMERA" />

并且对于上面的棉花糖运行时间许可是必需的

喜欢

 if (ContextCompat.checkSelfPermission(getContext(),
            Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity)
                getContext(), Manifest.permission.CAMERA)) {


        } else {
            ActivityCompat.requestPermissions((Activity) getContext(), 
                    new String[]{Manifest.permission.CAMERA},
                    MY_PERMISSIONS_REQUEST_CAMERA);
        }

    }

在onRequestPermissionsResult中检查是否授予权限

 @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_SHORT).show();

                    // main logic
                } else {
                    Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show();}
}

关于Android - 撤销权限 android.permission.CAMERA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54180229/

相关文章:

java - 带 Activity 的抽屉导航

java - Android TCP 客户端。服务器仅在进程停止后接收消息

android - AsyncTask有时会崩溃

java - 如何使用 jackson 将 json 文档的额外属性反序列化为 map 或其他字段?

java - 如何在 Android 中将 exif 数据写入图像?

android - Eclipse 设备选择器

Android数据绑定(bind)问题: Missing return statement in generated code while using with a custom view?

android - Retrofit2:将post参数添加到拦截器中

Android - 拍摄照片

android - 在 Jellybean 中,相机 Intent 在使用 FileProvider 时返回 RESULT.CANCELLED