简化安卓6.0运行时权限代码
来源:互联网 发布:学校网络限制设备 编辑:程序博客网 时间:2024/05/21 09:11
简化安卓6.0权限代码
最近业余时间在写一个APP,由于时间比较赶,要在半个月内写好,二三十页面,光是运行时权限代码就让我写的欲仙欲死,于是就痛下决心,一定要把这个给干掉,于是写完之后就立马写了两个基类,简化运行时权限代码
用法
与自定义控件不一样,不能先展示效果图了,那就只能展示一下怎么用,大家看一看有没有简单一些,如果觉得有什么不妥的欢迎大家指出
1,继承CheckPermissionActivity
去github上下载CheckPermissionActivity,把要处理的运行权限的activity继承CheckPermissionActivity
public class MainActivity extends CheckPermissionActivity implements View.OnClickListener {
CheckPermissionActivity下载地址→点击此处进入下载页面
调用 checkPermission(this,CALL_PHONE,3);方法
调用 checkPermission(this,CALL_PHONE,3);,其中第一个参数就是Activity,第二个参数就是自己想要获取的权限,第三个就是请求码。
@Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: checkPermission(this,CALL_PHONE,3); break; case R.id.button3: checkPermission(this,WRITE_EXTERNAL_STORAGE,1); break; } }
重写onPermissionResult(String permission, int requestCode,boolean isSucess)方法,
重写onRequestPermissionsResult(String permission, int requestCode,boolean isSucess),他会把请求的权限和请求码回调回来,然后可以根据自己的请求码和权限判断是哪一次请求并进行处理,第一个参数是请求的权限,第二个是请求码,第三个是是否获取权限
@Override protected void onPermissionResult(String permission, int requestCode, boolean isSucess) { if (permission.equals(CALL_PHONE)) { if (isSucess) { text.setText(permission + ":" + requestCode + "true" + "callphone"); } else { text.setText(permission + ":" + requestCode + "flase" + "callphone"); } } else if (permission.equals(WRITE_EXTERNAL_STORAGE)) { if (isSucess) { text.setText(permission + ":" + requestCode + "true" + "write"); } else { text.setText(permission + ":" + requestCode + "false" + "write"); ; } } }
怎么样,是不是比之前简单多了,当然你要是觉得还有点麻烦的话可以继承CheckPermissionExtendActivity
CheckPermissionExtendActivity
下载并继承CheckPermissionExtendActivity
CheckPermissionExtendActivity下载地址→点击此处进入下载页面
public class MainActivity extends CheckPermissionExtendActivity implements View.OnClickListener {
调用checkPermission(this,CALL_PHONE,3)
@Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: checkPermission(this,CALL_PHONE,3); break; case R.id.button3: checkPermission(this,WRITE_EXTERNAL_STORAGE,1); break; } }
重写onXXXResult(int requestCode, boolean isSucess)方法
重写onXXXResult(int requestCode, boolean isSucess)方法,其中xxx就是请求权限的单词,比如说,申请的CALL_PHONE权限,则需要重写onCallPhoneResult,申请的是WRITE_EXTERNAL_STORAGE权限,重写的就是onWriteExternalStoragerResult,这样就可以不用根据返回的permission进行判断了,其中requestcode是请求码,issucess代表用户是否授权
@Override protected void onCallPhoneResult(int requestCode, boolean isSucess) { text.setText("callphone"+requestCode+isSucess); } @Override protected void onWriteExternalStoragerResult(int requestCode, boolean isSucess) { text.setText("writeextera"+requestCode+isSucess); }
源码解析
定义一个检查额权限的函数
/** * 检查权限的函数,如果有就直接调用,没有则申请后调用 * @param activity 调用的activity * @param permission 检查的权限 * @param checkCode 请求码 */ public void checkPermission(Activity activity, String permission, int checkCode) { if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{permission}, checkCode); } else { // onPermissionResult(permission,checkCode,true); } }
定义一个回调函数
/** * 请求调的函数 * @param permission 权限 * @param requestCode 请求码 */ protected void onPermissionResult(String permission,int requestCode,boolean isSucess){};###进行回调首先在检查权限时,如果有权限就直接回调
public void checkPermission(Activity activity, String permission, int checkCode) { if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{permission}, checkCode); } else { // onPermissionResult(permission,checkCode,true); }}
如果是没有权限则申请权限,并在结果里进行回调
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the // contacts-related task you need to do. onPermissionResult(permissions[0],requestCode,true); } else { // permission denied, boo! Disable the // functionality that depends on this permission. onPermissionResult(permissions[0],requestCode,false); }}
“`
好了,一个简单的封装就完成了。
- 简化安卓6.0运行时权限代码
- 安卓6.0运行时权限解析
- 安卓6.0运行时权限处理
- 安卓6.0运行时权限,终极答案
- 关于安卓6.0的运行时权限
- 安卓6.0运行时权限处理方案
- 安卓6.0在Fragment申请运行时权限
- 安卓ROOT权限代码
- 安卓ROOT权限代码
- 安卓6.0新特性在Fragment申请运行时权限
- 安卓学习笔记---聊一聊Android 6.0的运行时权限
- 安卓学习笔记--- Android 6.0运行时权限的申请使用及EasyPermissions的使用
- Android M 新的运行时权限开发者需要知道的一切 (安卓6.0新权限系统)
- 安卓6.0权限
- 安卓入门:获取危险权限——运行时权限处理
- 6.0运行时权限
- 6.0运行时权限
- 6.0运行时权限
- Spring事务管理
- linux中wc命令详细介绍
- liferay主题内容相关
- Struts2文件上传和下载
- HTML DOM常用的操作
- 简化安卓6.0运行时权限代码
- 取HashMap的键,值,键值对
- 求int型正整数在内存中存储时1的个数
- 中兴笔试的两个小题
- iOS添加子视图控制器
- 快速掌握 Android Studio 中 Gradle 的使用方法
- 免费新闻娱乐接口文档
- More with smbclient, smbget, enum4linux
- pdf转换成jpg格式最简单的方法分享