当前位置: 首页 > 知识库问答 >
问题:

java - android 申请相机权限没有弹出授权对话框怎么办?

杜联
2023-12-04

android api level 29的设备上首次安装申请相机权限,没有弹出授权的对话框怎么办?

已经在清单文件中声明相机权限

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

并且声明了与相机应用的交互规则:

<queries>      <intent>        <action android:name="android.media.action.IMAGE_CAPTURE"/>    </intent>      <intent>        <action android:name="android.media.action.VIDEO_CAPTURE"/>    </intent></queries>

然后在需要使用相机的地方也动态申请了相机授权,但是死活不弹出相机授权对话框(应用首次安装或者卸载重装都如此)。

public class TestActivity extends AppCompatActivity {    private ActivityResultLauncher<Intent> faceActivityResultLauncher;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // ... 省略代码                this.faceActivityResultLauncher = this.registerForActivityResult(            new ActivityResultContracts.StartActivityForResult(),             result -> {                if (result.getResultCode() != Activity.RESULT_OK) {                    UiCommon.toast(this, "相机拍摄失败");                    return ;                }                this.updateFace(this.face);            }        );        // 申请授权        ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.CAMERA}, TEST_CODE);    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        boolean isGranted = PermissionCommon.permissionResultHandle(this, requestCode, permissions, grantResults);        switch (requestCode) {            case TEST_CODE:                if (!isGranted) {                    // 省略部分代码 ...                      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                     intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);                     this.faceActivityResultLauncher.launch(intent);                }                break;            default:                break;        }    }}

这是为什么?该如何解决上述问题?

共有1个答案

狄新立
2023-12-04

问题已解决,是连续申请权限导致的。上述代码没贴完整,问题如下:

 public boolean checkPermissions() {        PermissionCommon.requestStoragePermissions(this.activity);        PermissionCommon.requestCameraPermissions(this.activity);        if (!PermissionCommon.isHasStoragePermission(this.activity)) {            UiCommon.toast(this.activity, "无文件存取权限");            return false;        }        if (!PermissionCommon.isHasCameraPermission(this.activity)) {            UiCommon.toast(this.activity, "无相机权限");            return false;        }        return true;    }

将权限合成一下一次性申请就可以了。

 public boolean checkPermissions() {        // 将存储和拍照权限合在一起申请        String[] permissions = new string[] {...};        PermissionCommon.requestPermissions(this.activity, permissions);        if (!PermissionCommon.isHasPermissions(this.activity, permissions)) {            UiCommon.toast(this.activity, "部分或全部权限未授予");            return false;        }        return true;    }
 类似资料:
  • 我正在使用Spring5和Java8创建一个RESTful客户机,它将登录CoinBase并在给定的时间为我进行交易。我知道存在一个不受支持的用于Coinbase的Java SDK,我也在研究这些代码以寻找线索。 我正在我的Spring应用程序中使用CoinBase Oauth2客户端,到目前为止它非常成功。我使用回调URL进行授权调用。这将打开一个对话框,如果我已经登录,请我用MyApp授权我的

  • 我一直在尝试实现运行时权限。下面是它的代码片段: RunTimePermissionsUtil。JAVA 在一个名为AddFileActivity的活动中,我在一个点击事件中实现了这个监听器,其代码如下: 所以,我所有的代码都会执行,它会进入onNeed权限()代码,其中,它会进入 但是,令人惊讶的是,在此之后,没有任何对话框要求获得摄像头的运行时权限,相反,对话框关闭并再次显示活动。 有没有人能

  • 我编写了一个简单的应用程序,通过USB向连接到Android 4.0平板电脑的USB打印机发送命令。由于某些原因,我无法通过获取权限来声明接口和打开连接。以下是相关代码: 这是清单的相关部分: 我已将设备配置为,以便在连接打印机时启动我的应用,并在枚举期间找到该设备(onResume())并调用权限请求。但是,无论出于何种原因,我从未看到“请求权限”对话框(我在网上看过它的屏幕截图),也不会调用o

  • 我正在尝试调用我的类来检查存储权限 但问题是,它不让我在一个类中实现它,我得到了以下错误- "类型权限的方法onRequest estPermissionsResult(int, String[], int[])必须覆盖或实现超类型方法" 类型权限的方法requestPermissions(字符串[],int)未定义 这是我的密码- }

  • 买家如何退换货? 1、功能路径 个人中心-我的订单-已发货-申请维权 2、操作流程 1、进入个人中心,找到订单 2、点击详情,进入订单详情页 3、点击申请维权,填写信息 4、提交 流程如下图: 5、买家填写相关处理方式、退款原因、退款金额、备注等信息后提交。 6、商家处理售后申请,打开后台-订单-售后服务 售后服务的列表显示项为商品信息、商品清单、订单金额、收货信息、买家、交易状态、操作。可根据下

  • 本文向大家介绍Android 程序申请权限注意事项,包括了Android 程序申请权限注意事项的使用技巧和注意事项,需要的朋友参考一下 为Android 程序申请权限注意 Android系统提供为程序提供了权限申请,即在manifest中使用uses-permission来申请即可.实现起来非常简单,但是有些问题会随之浮出水面. 常见的现象是,有时候新加一个权限,(在Google Play上)程序