android强制权限,Android6.0动态权限,强制申请权限方法
前几天遇到一个需求强制用户去申请某个权限,大家都知道(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动态权限,强制申请权限方法相关推荐
- Android6.0动态权限申请及RxPermissions权限库使用
一.AndroidManifest.xml 所有权限列表: 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据 ...
- 最容易理解的Android6.0动态权限申请教程
1.前言 这已经是N年前的知识点了,但是我一直以来都有点逃避学习这个,而且印象中很麻烦,后来也不间断有学习过一点,但是一直没认真去用过,所以对这个android6.0的动态权限申请一直是不清楚的状态, ...
- Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题
Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...
- 安卓获取摄像头帧率_一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法...
一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法 [技术领域] [0001 ]本发明涉及通讯技术领域,尤其涉及一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法. ...
- 安卓获取摄像头帧率_一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法_2015109767475_说明书_专利查询_专利网_钻瓜专利网...
技术领域 本发明涉及通讯技术领域,尤其涉及一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法. 背景技术 多媒体终端基于android平台,在会议应用等场景中,需要使用外置的USB摄 ...
- android studio viewo,android studio 3.6.0 绑定视图新特性的方法
Android studio 3.6.0 绑定视图使用方法 1.确保你的 build gradle 最低为3.6.0 dependencies { classpath 'com.android.too ...
- Android6.0动态设置读写权限(Android拍照或从相册中选图片预览出现问题)
做了一个Android拍照或从相册中选图片传服务器的demo,出现了问题虽然 图片路径 也可以打印出来,然后去看权限那里也申请了读写权限 <uses-permission android:nam ...
- android动态获取地理位置权限,Android6.0获取GPS定位和获取位置权限和位置信息的方法...
1.添加权限--6.0之后要动态获取,下面会说 2.直接上代码,不多说,代码中注释很详细. private static final int BAIDU_READ_PHONE_STATE = 100; ...
- android 动态权限申请源码,Android6.0动态权限笔记
参考: 提示用户授予或拒绝权限的系统对话框. 一. 权限说明: 1. 权限种类: Android中权限分为正常权限(即,不会对用户隐私或设备操作造成很大风险的权限)和危险权限(即,可能影响用户隐私或设 ...
- Android6.0动态权限
Android6.0对于程序员来说最大的改变就是运行时权限,其目的就是让用户可以直接在运行时管理应用权限. 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不 ...
最新文章
- Java SHAA加密
- UA STAT687 线性模型II 最小二乘理论3 广义最小二乘
- Ubuntu下搜狗输入法乱码(二)
- laravel中单独获取一个错误信息的方法
- 威佐夫博弈:百练OJ:1067:取石子游戏
- C++ 十大经典排序算法原理及模板之STL方法实现以及稳定性分析
- fiddler chrome_fiddler抓包教程
- F-Stack:ff_run函数详解
- 无需插件利用Chrome将网页储存为mht文件
- 下载 安装 破解Axure
- SQL server 2008 r2导入数据
- arm linux logrotate,交叉编译zlog日志工具:zlog+cronolog+crontab+logrotate
- Xilinx平台SRIO介绍(五)示例工程Example Design介绍
- 王阳明的心学精髓是什么?
- python爬取天天基金网_Python爬虫日记二:爬取天天基金网
- 360校招——最后赢家(C++)
- JVM常用参数与工具
- 获取对话框当前cfont_获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)...
- pyhton自动登录邮箱发消息
- 最新微信hook二次开发C#Demo之获取消息代码
热门文章
- 圆角进度条,带数字居中显示的圆角进度条
- java---servlet与filter的联系与区别
- 查询工商单位注册信息 平台
- 《迎接互联网的明天——玩转3D Web》
- 群星服务器id不显示,群星代码([群星]求助,领袖特性代号怎么查看啊 NGA玩家社区)...
- Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?
- dubbo之SPI扩展机制注解:@Extension注解的作用
- 分析RocketMQ消费端长轮询的源码实现
- Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法
- memcached命令