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

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

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

img


这是oncreate代码片段

  • 写回答

4条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 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日

悬赏问题

  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿
  • ¥15 Matlab在app上输入带有矩阵形式的初始条件发生错误
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址