首页 > 编程知识 正文

read phone state权限,root权限

时间:2023-05-03 10:11:50 阅读:43594 作者:4868

安卓6.0发布了这么久,关于运行时权限也看过很多资料,比较过一些流行的库。 但是,我个人喜欢在项目中亲手封装的东西。 临摹也可以。 不知道是什么原因。

前天我不打算听hpdzjy的直播。 说明执行时的权限封装,收益很多。 画葫芦,录下来,没看直播的同学也可以看(hpdzjy的第二行代码已经成了工具书,每次看到hpdzjy的签名,真的觉得字像人。 )

以前封装基类库,可以直接使用快速开发,正好集成了运行时权限。 开始:

权限,运行时权限

授予权限

*如果设备运行的是Android6(APIlevel23 )或更高版本,或者APP应用程序的targetSdkVersion为23或更高版本,则用户正在运行APP应用程序所需的权限。 因为使用者可以随时取消权限,所以每次执行APP应用程式时,都必须检查使用者是否有权限。

如果设备运行的是Android5.1(APIlevel22 )或更低版本,或者targetSdkVersion的APP应用程序小于或等于22,则在用户安装APP应用程序时,系统会提示用户授予权限。 已更新使用者的APP应用程式。 添加具有新权限的APP应用程序的更新版本时,系统将提示您向用户授予权限。 用户安装APP应用程序后,吊销许可证的唯一方法是卸载APP应用程序。

拒绝权限

*如果某个权限被拒绝,则需要向用户说明使用该权限的具体目的,目的是确保功能请求的权限始终正常工作,因此应该说APP应用程序需要提供允许该权限的方法。 权限被拒绝的方法有以下两种。

用户拒绝权限请求

用户曾经选择过“不再询问”,但用户权限会默默地否定,没有警告

套装软体

因为申请权限后,会坐下来破坏到当前的活动,所以首先要定义接口权限监听器

publicinterfacepermissionlistener//许可证成功授权void onGranted (; //许可证部分“授权许可”; 拒绝//语音许可(listDeniedPermission ); }

在BaseActivity中写入许可证申请,首先检查申请的权限是否得到批准,进入等待批准的数组,然后去申请权限。 如果一切都被许可,则直接吊销许可证并成功。

/*权限申请

* @param permissions

* @ param监听器

*/

protectedvoidrequestruntimepermission (字符串[ ] permissions,permission监听器监听器) {

//todo获取堆栈顶部活动。 为null时。 返回;

this.mpermissionlistener=listener

listpermissionlist=new ArrayList (;

字符串权限3360权限(for ) {

if (上下文完成. checkselfpermission (this,permission )!=package manager.permission _ granted ) {

permissionlist.add(permission;

}

}

if (! permissionList.isEmpty (

活动compat.request permissions (this,permission list.to array (new string [ permission list.size ] ),1 );

}else{

listener.onGranted (;

}

}

然后,改写许可证返还方法。 系统返回两个数组。 String[] permissions是您申请的权限,int[] grantResults是许可结果。 拿出批准结果进行比对,如果被批准则加入批准序列,如果被拒绝则加入拒绝序列。 返回到在权限监听器注册的活动

/**申请结果

* @ param请求代码

* @param permissions

* @ param授权结果

*/

@Override

publicvoidonrequestpermissionsresult (intrequestcode,@NonNull String[] permissions,@NonNull int[] grantResults ) {

super.onrequestpermissionsresult (请求代码,权限,许可结果);

交换机(请求代码) {

case 1:

if (许可结果. length0) {

listdeniedpermissions=new ArrayList (;

listgrantedpermissions=new ArrayList (;

for(intI=0; I授权结果. length; I ) {

int grantResult=grantResults[i];

授权结果!=package manager.permission _ granted ) {

string permission=permissions [ I ];

eniedpermissions.add (permission );

}else{

string permission=permissions [ I ];

授权权限. add (权限;

}

}

定义的权限. isempty () (if ) ) )。

mPermissionListener.onGranted (;

}else{

mpermissionlistener.on denied (denied permissions;

mermissionlistener.on granted (granted permissions;

}

}

布雷克;

}

}

然后,实现了你的基本活动的活动实现了PermissionListener,需要申请权限的地方就呼叫请求者(permissions,this ) 在回退方法中根据结果实现逻辑。

附件:

权限分为危险权限和通常权限,另外还有特别权限、自定义权限。

常规权限(PROTECTION_NORMAL )对于用户隐私和安全没有很大风险的权限AndroidManifest.xml声明,如果APP应用程序需要常规权限,则在安装时系统会自动授予该权限使用中不会提示用户,用户无法取消这些权限。

危险权限,需要使用的应当检查有无许可。 如果没有,弹出对话框向用户请求许可。 这些权限将分组,批准同一组的任何权限,其他权限也将自动批准。 下表:

例如,需要Android.permission.read _ contacts,然后去读取联系人。 此权限由用户批准,并具有地址簿写入权限permission : Android.permission.write _ contacts和permission 3360 Android.permission.gggion

don't worry be happy

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。