Android开发实战总结

Android6.0 动态权限详解及动态申请权限

2017-11-01  本文已影响116人  AKyS佐毅

1、动态权限获取机制

2、动态权限机制的开启

动态权限机制的开启

因此需要在项目配置文件中修改您的targetSdkVersion配置。
对于Eclipse环境,请更改AndroidManifest.xml中代码;AndroidStudio环境,请更改build.gradle中的代码。

3、关于android:protectionLevel:权限的等级

对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。

4、动态权限代码样例

在Android 6.0系统中,需要动态获取的权限涉及到:

Manifest.permission.READ_PHONE_STATE;
Manifest.permission.ACCESS_COARSE_LOCATION;
Manifest.permission.ACCESS_FINE_LOCATION;
Manifest.permission.READ_EXTERNAL_STORAGE;
Manifest.permission.WRITE_EXTERNAL_STORAGE;

5、获取权限使用API

private static final int BAIDU_READ_PHONE_STATE =100;
if(mContext.checkSelfPermission(Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED) {
   // 申请一个(或多个)权限,并提供用于回调返回的获取码(用户定义)
   requestPermissions( new String[]{ Manifest.permission.READ_PHONE_STATE },BAIDU_READ_PHONE_STATE );
}
public void onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions,grantResults);
    switch(requestCode) {
        //requestCode即所声明的权限获取码,在checkSelfPermission时传入
        case 1:
            BAIDU_READ_PHONE_STATE:
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //获取到权限,做相应处理
                //调用定位SDK应确保相关权限均被授权,否则会引起定位失败
            } else{
                //没有获取到权限,做特殊处理
            }
            break;
        default:
            break;
    }
}

6、一个权限获取方式

一个权限获取方式

7、多个权限获取方式

多个权限获取方式

8、一个和多个权限获取唯一不同的地方需要在回调中分别处理

回调中分别处理

9、动态权限获取的封装

定义权限回调接口 Activity管理器获取最上层的Activity 接口处理返回信息

Demo地址如下:
AndroidPermission Demo 地址链接

上一篇 下一篇

猜你喜欢

热点阅读