android-权限

仅供参考(版本不同而有差异)

1.权限-相机

1-1 Manifest 必须声明

复制代码
<uses-permission android:name="android.permission.CAMERA" />
没声明就直接申请,系统会立即拒绝,连弹框都不会弹。

2.2 应用

复制代码
private void myPermissions_Camera(){

    //摄像头权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {

        Log.e("TEST","相机权限:已授权");

    } else {
        Log.e("TEST","相机权限:没有授权");
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA}, 1);                            //跳出对话框询问
    }
}

2.权限-外部存储

2-1Manifest 声明(推荐写法)

复制代码
<!-- Android 9 及以下需要 WRITE -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28" />

<!-- Android 12 及以下读公共文件需要 READ -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />

<!-- Android 13+ 读媒体(按需声明) -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

maxSdkVersion 让旧权限只在需要的版本生效,避免新系统上多申请。

java 复制代码
    public void myPermission_ExternalStorage(){

        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            Log.e("TAG", "myRequestPermission: 申请权限中。。。。。");
        }
        else{Log.e("TAG", "myRequestPermission: 您已经申请了权限"); }

    }

3.权限-同时多个(外部存储 摄像头)

调用处: myPermissions_CameraAndStorage();

把你原来的两个方法合并成一个 ,一次 requestPermissions 同时申请相机 + 存储,系统只弹一个框

java 复制代码
private static final int REQ_CAMERA_STORAGE = 100;

private void myPermissions_CameraAndStorage() {
    // 1. 收集所有未授权的权限
    List<String> need = new ArrayList<>();

    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        need.add(Manifest.permission.CAMERA);
    }

    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
        need.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    }

    // 2. 都已授权 → 直接干活
    if (need.isEmpty()) {
        Log.e("TEST", "相机 + 存储 权限都已授权");
        doWork();
        return;
    }

    // 3. 一次申请所有未授权的权限
    Log.e("TEST", "申请权限中:" + need);
    ActivityCompat.requestPermissions(this,
            need.toArray(new String[0]),
            REQ_CAMERA_STORAGE);
}

2-2必须配套的回调

复制代码
@Override
public void onRequestPermissionsResult(int requestCode,
        @NonNull String[] permissions,
        @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == REQ_CAMERA_STORAGE) {
        boolean allGranted = grantResults.length > 0;

        for (int i = 0; i < grantResults.length; i++) {
            if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                Log.e("TEST", "已授权:" + permissions[i]);
            } else {
                allGranted = false;
                Log.e("TEST", "被拒绝:" + permissions[i]);
            }
        }

        if (allGranted) {
            Log.e("TEST", "全部授权,执行操作");
            doWork();
        } else {
            Log.e("TEST", "部分权限被拒绝");
            Toast.makeText(this, "需要相机和存储权限", Toast.LENGTH_SHORT).show();
        }
    }
}

持续更新

相关推荐
geats人山人海5 分钟前
java 4继承
java·开发语言
众链网络28 分钟前
Agent 的成本大头不在“写“,在“判断“:拆解专用决策模型的三层架构
java·开发语言·人工智能·微服务
周小董31 分钟前
[1371]jdk管理工具
java·开发语言
青春逝如流水43 分钟前
Java 中线程的创建方式:从基础到现代
java·开发语言·多线程·ai文章
Peregrine91 小时前
C++ - > 类和对象
java·c++·算法
2501_933923251 小时前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
Wang's Blog1 小时前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP 消息转换器
java·中间件·java-rabbitmq
Re_zero2 小时前
一次 SSE 断流排查:PrintWriter 吞掉了我的 IOException
java·后端
我是人✓2 小时前
Java核心语法:作用域、循环与大数值处理
java·开发语言·后端
夜之眷属3 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法