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();
        }
    }
}

持续更新

相关推荐
006_1 小时前
ruoyi-vue-plus项目 minio外网访问配置
java
程序猿在线码字1 小时前
数据结构前置知识(java版)
java
2501_916008891 小时前
怎么用 Godot 导出 iOS 应用并上架 App Store?签名字段该填什么?
android·ios·小程序·https·uni-app·iphone·webview
步行cgn1 小时前
Spring 基于 XML 的自动装配:byType 详解
java·后端·spring
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day46|贯穿项目 2 思维导图复盘
java·开发语言·vue.js·学习·spring
智慧物业老杨4 小时前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava
alexhilton10 小时前
藏在设备上的秘密,终究藏不住
android·kotlin·android jetpack
步行cgn10 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风10 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven