Android6.0动态运行权限简单明了版
首先我们为什么要用这个6.0的权限,因为时代在进步嘛,要不谁用它啊,
直接把那个目标版本变成23以下不就好啦,但是身为一个优秀的Android高级开发工程师,
肯定得用最新的是吧,废话不多说,我来给大家讲解一下鄙人的自我见解。有意见可以提,但是不好使!
Android6.0这个新的动态运行权限
- 将权限分为一般权限和危险权限两种,一般权限跟以前一样在AndroidManifest声明,危险权限需要开发者在代码中手动的动态申请
- 动态申请权限,系统弹出对话框,用户可点击确定或拒绝,系统提供用户的选择回调,从而开发者处理相应的逻辑
- 用户可以选择拒绝并不再提醒
android系统分为原生系统(谷歌公司做的系统-—— google nexus)和第三方厂商定制系统(rom) 暂时不做运行时权限适配的方案(不推荐) 如果暂时还不想适配6.0运行时权限,但是又想要app可以在6.0及以上机型运行,那我们可以将目标版本改为23以下,如: targetSdkVersion 22 ,最好使用最高的版本也就是22
- 不管是6.0以下还是以上的机型都可以运行,跟之前一样权限在安装时一次性授予
- 由于6.0机型在设置中可以进行权限管理,用户可以取消该应用的某个权限,但是app并不知道该权限被取消,此时app会崩溃(合理的try可以避免)
【Android6.0动态运行权限简单明了版】
public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{ private static final int CALL_PHONE_REQUEST_CODE = 100; //打电话权限的请求码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { initData(); } }); }private void initData() { if (Build.VERSION.SDK_INT >= 23) { //打电话的权限 String[] mPermissionList = new String[]{Manifest.permission.CALL_PHONE}; if (EasyPermissions.hasPermissions(MainActivity.this, mPermissionList)) { //已经同意过 } else { /*EasyPermissions.requestPermissions(): 第一个参数:Context对象 第二个参数:权限弹窗上的文字提示语。告诉用户,这个权限用途。 第三个参数:这次请求权限的唯一标示,code。 第四个参数 : 一些系列的权限。*/ //未同意过,或者说是拒绝了,再次申请权限 EasyPermissions.requestPermissions( this,//上下文 "没有这个权限程序无法运行", //提示文言 CALL_PHONE_REQUEST_CODE, //请求码 mPermissionList //权限列表 ); } } else { //6.0以下,不需要授权 }}@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //将请求结果传递EasyPermission库处理 EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }@Override public void onPermissionsGranted(int requestCode, List list) {}//拒绝授权 @Override public void onPermissionsDenied(int requestCode, List perms) {Toast.makeText(MainActivity.this,"用户授权失败",Toast.LENGTH_SHORT).show(); //如果用户点击拒绝授权并且点击不在提醒,这时候会进入那个设置的 页面,让用户手动开启权限 if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this).build().show(); } }}
推荐阅读
- 动态组件与v-once指令
- Android6.0~9.0适配
- iview|iview upload 动态改变上传参数
- react-navigation|react-navigation 动态修改 tabBar 样式
- K14|K14 9/15销售提问法D2
- 动态|诗歌《在精神科诊室》发《小说与诗》(香港)报
- 运行报错Cannot|运行报错Cannot find module '@babel/compat-data/corejs3-shipped-proposals’
- C语言静态动态两版本通讯录实战源码
- Python程序运行方式
- Trie树(动态规划)