前几天遇到一个需求强制用户去申请某个权限,大家都知道(Api 23)以后官方提出动态权限,所以我们要提示用户打开权限,实现功能后总结了一下实现方法,下面来说一下我是怎么强制用户去申请权限的:

1.先介绍一下平时申请动态权限常用的一些API:

//用于检测权限是否打开

ContextCompat.checkSelfPermission(@NonNull Context context, @NonNull String permission) == PackageManager.PERMISSION_DENIED

//去申请权限

ActivityCompat.requestPermissions(final @NonNull Activity activity,final @NonNull String[] permissions, final @IntRange(from =0)int requestCode)

//返回权限申请结果

onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)

2.几句话说明强制用户申请权限流程:

1.判断用户是否打开权限   checkSelfPermission()

2.如果用户没有打开权限则去申请权限  requestPermissions()

3.返回申请结果  onRequestPermissionsResult()

4.判断用户是否决绝权限  grantResult == PackageManager.PERMISSION_DENIED

5.如果用户拒绝则提示弹出Dialog提示去设置页面打开权限

6.在onActivityResult()判断全是是否打开,如果没有调用 requestPermissions()去申请权限

上面是一个循环申请的过程

3.代码图片

4.直接上代码了

public class MainActivityextends Activity {

private String[]PERMISSION =new String[]{Manifest.permission.ACCESS_FINE_LOCATION};

private static final StringTAG ="";

private static final int OPEN_SET_REQUEST_CODE =15;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initData();

}

private void initData() {

if (lacksPermissions(PERMISSION)) {

Log.i(TAG, "缺少权限去申请");

ActivityCompat.requestPermissions(this, PERMISSION, OPEN_SET_REQUEST_CODE);

}else {

Log.i(TAG, "已经全部打开权限");

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode ==OPEN_SET_REQUEST_CODE) {

if (lacksPermissions(PERMISSION)) {

Log.i(TAG, "缺少权限去申请");

ActivityCompat.requestPermissions(this, PERMISSION, OPEN_SET_REQUEST_CODE);

}

}

}

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode ==OPEN_SET_REQUEST_CODE) {

if (hasAllPermissionsGranted(grantResults)) {

Log.i(TAG, "用户允许打开权限");

}else {

Log.i(TAG, "用户拒绝打开权限");

showPermissionDialog("请去设置页面打开***权限", OPEN_SET_REQUEST_CODE);

}

}

}

/**

* 判断权限申请结果

*

* @param grantResults

* @return

*/

private boolean hasAllPermissionsGranted(@NonNull int[] grantResults) {

for (int grantResult : grantResults) {

if (grantResult == PackageManager.PERMISSION_DENIED) {//PERMISSION_GRANTED 授予

return false;

}

}

return true;

}

// 判断是否缺少权限权限集合 true=缺少权限

public boolean lacksPermissions(String... permissions) {

for (String permission : permissions) {

if (lacksPermission(permission)) {

return true;

}

}

return false;

}

// 判断是否缺少权限  true=缺少权限

public boolean lacksPermission(String permission) {

return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_DENIED;

}

private void showPermissionDialog(String text, int requestCode) {

/*此处弹出Dialog显示内容为text(需要去设置页面打开***权限)具体Dialog我就不写了,

点击确定按钮调用toSetActivity(OPEN_SET_REQUEST_CODE)方法*/

toSetActivity(requestCode);

}

private void toSetActivity(int requestCode) {

Intent intent =new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", getPackageName(), null);

intent.setData(uri);

startActivityForResult(intent, requestCode);

}

}

android强制权限,Android6.0动态权限,强制申请权限方法相关推荐

  1. Android6.0动态权限申请及RxPermissions权限库使用

    一.AndroidManifest.xml 所有权限列表: 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据 ...

  2. 最容易理解的Android6.0动态权限申请教程

    1.前言 这已经是N年前的知识点了,但是我一直以来都有点逃避学习这个,而且印象中很麻烦,后来也不间断有学习过一点,但是一直没认真去用过,所以对这个android6.0的动态权限申请一直是不清楚的状态, ...

  3. Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题

    Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...

  4. 安卓获取摄像头帧率_一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法...

    一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法 [技术领域] [0001 ]本发明涉及通讯技术领域,尤其涉及一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法. ...

  5. 安卓获取摄像头帧率_一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法_2015109767475_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及通讯技术领域,尤其涉及一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法. 背景技术 多媒体终端基于android平台,在会议应用等场景中,需要使用外置的USB摄 ...

  6. android studio viewo,android studio 3.6.0 绑定视图新特性的方法

    Android studio 3.6.0 绑定视图使用方法 1.确保你的 build gradle 最低为3.6.0 dependencies { classpath 'com.android.too ...

  7. Android6.0动态设置读写权限(Android拍照或从相册中选图片预览出现问题)

    做了一个Android拍照或从相册中选图片传服务器的demo,出现了问题虽然 图片路径 也可以打印出来,然后去看权限那里也申请了读写权限 <uses-permission android:nam ...

  8. android动态获取地理位置权限,Android6.0获取GPS定位和获取位置权限和位置信息的方法...

    1.添加权限--6.0之后要动态获取,下面会说 2.直接上代码,不多说,代码中注释很详细. private static final int BAIDU_READ_PHONE_STATE = 100; ...

  9. android 动态权限申请源码,Android6.0动态权限笔记

    参考: 提示用户授予或拒绝权限的系统对话框. 一. 权限说明: 1. 权限种类: Android中权限分为正常权限(即,不会对用户隐私或设备操作造成很大风险的权限)和危险权限(即,可能影响用户隐私或设 ...

  10. Android6.0动态权限

    Android6.0对于程序员来说最大的改变就是运行时权限,其目的就是让用户可以直接在运行时管理应用权限. 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不 ...

最新文章

  1. Java SHAA加密
  2. UA STAT687 线性模型II 最小二乘理论3 广义最小二乘
  3. Ubuntu下搜狗输入法乱码(二)
  4. laravel中单独获取一个错误信息的方法
  5. 威佐夫博弈:百练OJ:1067:取石子游戏
  6. C++ 十大经典排序算法原理及模板之STL方法实现以及稳定性分析
  7. fiddler chrome_fiddler抓包教程
  8. F-Stack:ff_run函数详解
  9. 无需插件利用Chrome将网页储存为mht文件
  10. 下载 安装 破解Axure
  11. SQL server 2008 r2导入数据
  12. arm linux logrotate,交叉编译zlog日志工具:zlog+cronolog+crontab+logrotate
  13. Xilinx平台SRIO介绍(五)示例工程Example Design介绍
  14. 王阳明的心学精髓是什么?
  15. python爬取天天基金网_Python爬虫日记二:爬取天天基金网
  16. 360校招——最后赢家(C++)
  17. JVM常用参数与工具
  18. 获取对话框当前cfont_获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)...
  19. pyhton自动登录邮箱发消息
  20. 最新微信hook二次开发C#Demo之获取消息代码

热门文章

  1. 圆角进度条,带数字居中显示的圆角进度条
  2. java---servlet与filter的联系与区别
  3. 查询工商单位注册信息 平台
  4. 《迎接互联网的明天——玩转3D Web》
  5. 群星服务器id不显示,群星代码([群星]求助,领袖特性代号怎么查看啊 NGA玩家社区)...
  6. Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?
  7. dubbo之SPI扩展机制注解:@Extension注解的作用
  8. 分析RocketMQ消费端长轮询的源码实现
  9. Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法
  10. memcached命令