android6.0 权限管理 方案
2016-05-31 00:00
686 查看
摘要: android 6.0 权限管理
能找到这篇文章,说明你对android6.0权限已有所了解。介绍权限的文章满天飞,我就不介绍了。这里主要介绍2个问题。弹窗流程和微信的一样,大家打开微信可以试试。
1、如何知道已经获得权限?
2、系统第二次弹出权限询问对话框,用户勾选不再提示的复选框后,如果引导用户赋予应用权限?
这里使用到的开源库是
请自行加入到gradle里
0、先写个获得权限的回调方法,用户允许或者拒绝都会调用该方法
注意,该回调必须要加,否则开源库的onGranted()和onDenied(String permission)将不会调用
1、 开始检查是否有权限
2. 自定义权限询问对话框
3. 系统自动权限对话框
4. 跳转至应用设置页
5. 用户在应用设置页设置完权限后回到应用,判断是否已获得权限
能找到这篇文章,说明你对android6.0权限已有所了解。介绍权限的文章满天飞,我就不介绍了。这里主要介绍2个问题。弹窗流程和微信的一样,大家打开微信可以试试。
1、如何知道已经获得权限?
2、系统第二次弹出权限询问对话框,用户勾选不再提示的复选框后,如果引导用户赋予应用权限?
这里使用到的开源库是
compile 'com.anthonycr.grant:permissions:1.0'
请自行加入到gradle里
0、先写个获得权限的回调方法,用户允许或者拒绝都会调用该方法
注意,该回调必须要加,否则开源库的onGranted()和onDenied(String permission)将不会调用
//是否显示自己定义的dialog,系统权限dialog弹出后用户勾选不在提示,该参数将起作用 protected boolean isShowMyPermissionsDialog = false; @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (grantResults.length > 0){ if(grantResults[0] == PackageManager.PERMISSION_GRANTED) { //Do the stuff that requires permission... isShowMyPermissionsDialog=false; }else if (grantResults[0] == PackageManager.PERMISSION_DENIED){ // Should we show an explanation? isShowMyPermissionsDialog=true; } } //notify PermissionsManager.getInstance().notifyPermissionsChange(permissions,grantResults); }
1、 开始检查是否有权限
private void checkSdcardPermission() { //检查你是否有READ_PHONE_STATE权限 if (!PermissionsManager.getInstance().hasPermission(this, Manifest.permission.READ_PHONE_STATE)) { //shouldShowRequestPermissionRationale()默认为false //第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale()返回 true //第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale()返回 false if (ActivityCompat.shouldShowRequestPermissionRationale(SplashActivity.this, Manifest.permission.READ_PHONE_STATE) && isShowMyPermissionsDialog) { //显示自定义对话框,说明为啥需要这个权限 showMyPermissionsDialog(); } else { //显示系统自带的权限询问对话框 showSystemPermissionsDialog(); } return; } //已获得权限,读取想要的信息 ...... startActivity(); }
2. 自定义权限询问对话框
private void showMyPermissionsDialog() { showMessageOKCancel("在设置-应用-xx-权限中开启xxx权限,以正常使用xx功能", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_POSITIVE: //跳转设置页 goToAppSettings(); break; case DialogInterface.BUTTON_NEGATIVE: //取消 finish(); break; } } }); }
3. 系统自动权限对话框
private void showSystemPermissionsDialog() { PermissionsManager.getInstance().requestPermissionsIfNecessaryForResult(SplashActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, new PermissionsResultAction() { @Override public void onGranted() { MLog.d("已获得READ_PHONE_STATE权限"); //已获得权限,读取想要的信息 ...... } @Override public void onDenied(String permission) { MLog.d("没有获得READ_PHONE_STATE权限"); showMyPermissionsDialog(); } }); }
4. 跳转至应用设置页
private static final int REQUEST_APP_SETTINGS = 1; /** * 应用设置页 */ private void goToAppSettings() { Intent myAppSettings = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + getPackageName())); myAppSettings.addCategory(Intent.CATEGORY_DEFAULT); // myAppSettings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(myAppSettings, REQUEST_APP_SETTINGS); }
5. 用户在应用设置页设置完权限后回到应用,判断是否已获得权限
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_APP_SETTINGS) { if (PermissionsManager.getInstance().hasPermission(this, Manifest.permission.READ_PHONE_STATE)) { Toast.makeText(this, "READ_PHONE_STATE permissions granted!", Toast.LENGTH_SHORT).show(); //已获得权限,读取想要的信息 ...... startActivity(); } } super.onActivityResult(requestCode, resultCode, data); }
private void showMessageOKCancel(String message, DialogInterface.OnClickListener listener) { new AlertDialog.Builder(SplashActivity.this) .setMessage(message) .setPositiveButton("OK", listener) .setNegativeButton("Cancel", listener) .create() .show(); }
相关文章推荐
- PostgreSQL教程(十二):角色和权限管理介绍
- Mysql权限管理grant命令使笔记
- Android获取设备隐私 忽略6.0权限管理
- 如何使用AngularJs打造权限管理系统【简易型】
- 关于Yii 后台权限管理分享
- 第四章 INI配置
- MySQL之权限管理
- acl权限管理
- 实现业务系统中的用户权限管理
- Android 6.0 中动态获取权限
- Android系统性能演变历程
- 简单的sessionjava实现论坛权限管理
- 使用alter session set current_schema设置当前模式
- 【PHP】简单的登陆验证和权限管理
- HDFS权限管理
- 权限系统集中安全性管理探讨
- extjs4+sh+springmvc web系统的基础模块开发(一)-项目简介
- Android 6.0 RunTimePermission(运行时授权)
- Oracle用户及角色的权限管理[Oracle基础]
- ASP.NET 权限管理 页面静态化 OA系统培训 三层架构