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

持续更新

相关推荐
萧瑟余晖37 分钟前
Spring Batch核心模型与快速上手详解
java·spring·batch
缓慢更新1 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
三少爷的鞋2 小时前
Java 线程自上而下,Kotlin 协程自下而上
android
LMT流氓兔3 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
好的佩奇3 小时前
Dart 之增强枚举
android·flutter·dart
wangbing11254 小时前
平台介绍-modbus设备调试
java
梦影_4 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
西索斯coding4 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
wuminyu5 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
Flynn Liang5 小时前
大模型怎么自己调函数?Spring AI 2.0 Tool Calling 自动循环原理 + 完整时序图
java·人工智能·spring·agent·函数调用·springai·toolcalling