卧式纯绿 2024-04-08 11:55 采纳率: 62.1%
浏览 16
已结题

安卓开发相册和摄像头权限访问问题

安卓开发中申请使摄像头和相册存储权限时,两个权限访问的代码写在一块,在应用登录时始终只能弹出第一个,第二个权限无法弹出也无法使用该如何解决?

img


这是oncreate代码片段

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-04-08 12:00
    关注

    中午好🌞🌞🌞
    本答案参考ChatGPT-3.5

    针对这个问题,我有以下解决方案:

    1. 分别申请这两个权限

    在代码中分别申请两个权限。可以先申请摄像头权限,当获取到摄像头权限后,再去申请相册权限。这样可以保证两个权限都能申请成功。具体代码可以参考下面的示例:

    private void requestCameraPermission() {
        ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA},
                CAMERA_PERMISSION_REQUEST_CODE);
    }
    
    private void requestStoragePermission() {
        ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE},
                STORAGE_PERMISSION_REQUEST_CODE);
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case CAMERA_PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 获取了摄像头权限,继续申请相册权限
                    requestStoragePermission();
                }
                break;
            case STORAGE_PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 获取了相册权限,可以开始使用相关功能
                }
                break;
            default:
                break;
        }
    }
    
    1. 启动应用时,同时申请摄像头和相册权限

    在应用启动时,同时申请摄像头和相册权限。这样用户在登录时只需要一次授权即可。具体代码可以参考下面的示例:

    private void requestCameraAndStoragePermission() {
        ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA,
                Manifest.permission.READ_EXTERNAL_STORAGE}, CAMERA_AND_STORAGE_PERMISSION_REQUEST_CODE);
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case CAMERA_AND_STORAGE_PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                        && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                    // 获取了摄像头和相册权限,可以开始使用相关功能
                }
                break;
            default:
                break;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日