安卓动态申请权限

简介: 安卓动态申请权限

我们在使用一些官方app时,刚下载进去之后经常会弹出各种各样的权限获取请求,今天简单学习了下,希望不会误人子弟哈哈哈哈。

一、将需要用到的权限添加到Manifest清单里

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

这一步很重要,本人Debug时发现如果缺少这步,进入界面后点击屏幕毫无反应......

private static final String[] REQUEST_PERMISSIONS = {
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.RECORD_AUDIO,
};
private static final int PERMISSION_REQUEST_CODE = 1;

同时将对应的权限放到1个String数组里,标记一个权限申请标识码。

二、OnStart方法申请权限


在OnStart方法里判断权限是否申请过,如果没有,进行申请,申请的方法里用到了之前的String数组和权限申请标识码


@Override
protected void onStart() {
    super.onStart();
    if (!hasPermissionsGranted(REQUEST_PERMISSIONS)) {
        Log.d(Tag,"-------activityCompat.requestPermissions--------");
        ActivityCompat.requestPermissions(this, REQUEST_PERMISSIONS, PERMISSION_REQUEST_CODE);
    }
}


hasPermissionsGranted()方法:遍历String里的权限检测是否已经授予。


 /**
     * ContextCompat类的checkSelfPermission方法用于检测用户是否授权了某个权限。
     * PackageManager.PERMISSION_DENIED : -1
     * PackageManager.PERMISSION_GRANTED : 0 表示授权成功
     */
    public boolean hasPermissionsGranted(@NonNull String[] permissions) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(this, permission)
                    != PackageManager.PERMISSION_GRANTED) {
                return false;
                //此时没有授权,返回false
            }
        }
        return true;
        //已经授权过,返回true
    }


onRequestPermissionsResult()方法:在对应的Activity中获取到回调结果,通过标识码和hasPermissionsGranted()方法判断是否授予权限成功,失败则调用finish()方法退出应用。


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    Log.d(Tag,"-------onRequestPermissionsResult--------");
    if (requestCode == PERMISSION_REQUEST_CODE) {
       if (!hasPermissionsGranted(REQUEST_PERMISSIONS)) {//返回false代表申请失败
           Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();
           this.finish();
       }
    } else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

综上一个简单的权限申请demo已经成功。后续也可以在定制化的申请弹窗方面研究一下。

如有错误和疑问,敬请矫正!


目录
相关文章
|
5天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
20 0
|
4天前
|
Java Shell Android开发
android 权限申请
android 权限申请
18 5
|
5天前
|
XML API 数据库
Android权限
Android权限 【5月更文挑战第3天】
12 0
|
5天前
|
Android开发 开发者
Android打开开发者权限
Android打开开发者权限
18 0
|
5天前
|
Android开发
Android 9.0中sdcard 的权限和挂载问题
Android 9.0中sdcard 的权限和挂载问题
12 0
|
5天前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。 【5月更文挑战第2天】
19 0
|
5天前
|
Android开发
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
40 0
|
5天前
|
XML Android开发 数据安全/隐私保护
android 11后文件读写访问权限申请
android 11后文件读写访问权限申请
18 0
|
5天前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
72 1
|
5天前
|
存储 缓存 安全
Android系统 应用存储路径与权限
Android系统 应用存储路径与权限
24 0
Android系统 应用存储路径与权限