android6.0以上权限动态申请,有视频链接可以看效果。
开发者技术变现资源聚集地
https://www.baiydu.com
android6.0以上某些权限需要动态申请,虽然现在大多的手机系统版本在6.0,但是升级到6.0及以上是迟早的事,所以如何能够更好的控制动态申请权限时能有好的提示用户,及给用户带去更好的体验,是需要花点时间认真思考的,下面就将我的实现思路、代码、视频贴出,希望能帮助到看笔记的各位。
思路:
将需要动态申请的权限放入一个集合,在app启动时,判断 Build.VERSION.SDK_INT版本,当Build.VERSION.SDK_INT>22时,,遍历请求权限集合里的每一个权限,判断是否有未针对本App,没有开启的权限,定一个int全局变量,当前遍历请求权限时,如果某一个遍历权限未开启,给int变量+1, 遍历完毕,判断int ,当int>1弹出一个提示框。

这里用户如果点击取消,定义定义一个单例模式里的字段,来记录。比如我们这里请求的Manifest.permission.READ_PHONE_STATE权限被用户拒绝了,那么你在接下去的代码中就不能去获取device_id,否则app直接崩。
如果用户点击了确定,我们调用一个方法,跳转到权限设置页面,让用户选择开启,跳转之后,你ap片需要动态申请到的权限都在,权限开启栏中。
private void openAppPermissionSetting(int requestCode) {
PrimmessIntent =
new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + this.getPackageName()));
PrimmessIntent.addCategory(Intent.CATEGORY_DEFAULT);
builder=new AlertDialog.Builder(this);
builder.setIcon( R.mipmap.temp_log);
builder.setTitle("权限申请");
builder.setMessage("我们需要申请一些权限,以便给你带来更好的体验!");
//监听下方button点击事件
builder.setPositiveButton("确 定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
try {
startActivityForResult(PrimmessIntent, requestCode);
PrimmessIntent=null;
PrimmessOk=true;
} catch (Throwable e) {
}
}
});
builder.setNegativeButton("取 消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
PrimmessOk=false;
Toast.makeText( LaunchActivity.this, "部分权限被拒绝获取,将会影响后续功能的使用,建议重新打开", Toast.LENGTH_LONG ).show();
isorNoStopPrimmess=isorNoStopPrimmess+1;
LastMethord();
}
});
//设置对话框是可取消的
builder.setCancelable(true);
AlertDialog dialog=builder.create();
dialog.show();
}
重要:下面这一点很重要了,就是用户即使选择了确定,跳转到权限设置里面了,他未设置开启权限,或则没有完全开启怎么办,就返回了怎么办?


如上面的截图他只开了两个,其他三个不开启就返回了App怎么办
解决方法:
当用户从上面授权截图返回App时,我们再遍历动态集合,看哪些未开启,如果这时还有未开启的权限,我们就不能再弹框了,那样就会造成死循环,强行要求用户开启权限,这样肯定是无法通过App商店审核的,而且用户体验也不好,这时我们就做一个记录,之后别使用未申请的权限了, 以上的判断在onResume里面,并且要单独开一个线程否则报错,而且需要定义一个中介全局变量,当用户点击确定时,设置一个值,以便用户返回时通过这个值来判断是否用户是从权限申请页里返回的!并且这时判断到还有未开启的权限时,我们可以有好的提示一下用户:"Toast.makeText( LaunchActivity.this, "部分权限被拒绝获取,将会会影响后续功能的使用,建议重新打开", Toast.LENGTH_LONG ).show()",然后再继续执行代码。
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
isorNoStopPrimmess=0;
if(PrimmessOk)
{
PrimmessOk=false;
RunLoadAndJumpHandle.post(judgeOpenPrimmessRunble);
} } //关闭输入账号窗口句柄
public Runnable judgeOpenPrimmessRunble = new Runnable() {
public void run() { RunLoadAndJumpHandle.sendEmptyMessage(1);
}
} ;
public Handler RunLoadAndJumpHandle = new Handler() {
public void handleMessage(android.os.Message msg) { for (PermissionModel model : models) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(LaunchActivity.this, model.permission)) { if(ActivityCompat.shouldShowRequestPermissionRationale( LaunchActivity.this,model.permission ))
{
ActivityCompat.requestPermissions(LaunchActivity.this, new String[]{model.permission}, model.requestCode);
}
else
{
isorNoStopPrimmess= isorNoStopPrimmess+1; } }
model=null;
} if (isorNoStopPrimmess>0)
{
Toast.makeText( LaunchActivity.this, "部分权限被拒绝获取,将会会影响后续功能的使用,建议重新打开", Toast.LENGTH_LONG ).show();
} //OpenApp();
LastMethord(); }
};
}
内容讲到这里,基本上就完了,下面有一个视频链接,有兴趣的可以去看下。需要完整代码可以加QQ:2819936788
<a href="https://v.qq.com/x/page/i0612llnhrl.html?ptag=qqbrowser">权限申请</a> 点击观看视频。</p>
https://v.qq.com/x/page/i0612llnhrl.html?ptag=qqbrowser
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。

android6.0以上权限动态申请,有视频链接可以看效果。的更多相关文章
- android 权限动态申请
名字其实有点让人感觉高大上"权限动态申请",其实也没有什么, 以前做Android程序的时候,比如需要打开摄像头 那么需要在 然后就可以了, 但是Android6.0之后呢,有些权 ...
- Android6.0获取权限
照着<第一行代码>打代码,然并卵,感叹技术进步的神速.最后提醒一点:IT类的书籍一定要注意出版时间!出版时间!出版时间!重要的事情说三遍 问题出在android6.0的权限获取问题上,以前 ...
- 【Unity游戏开发】Android6.0以上的动态权限申请问题
一.引子 最近公司的游戏在做安全性测试,期间也暴露出了不少安全上的问题.虽然我们今天要说的权限申请和安全性相关不大,但是也会影响到游戏的使用体验等,所以本篇博客中马三就想和大家谈谈Android6.0 ...
- Android6.0以上系统动态获取权限
动态权限的申请方法: 1.首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限: <uses-permission android:name="andr ...
- 【Android开发】Android6.0请求权限方式
记录一下最普通的动态请求权限的方法: private int requestCode == 123; //判断当前系统的版本 if(Build.VERSION.SDK_INT >= 23){ i ...
- QT 安卓 悬浮窗权限动态申请
一:申请方式: String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMI ...
- Android6.0 危险权限和普通权限
Normal Permissions如下 ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCESS_NOTIFICATION_POLICY ...
- Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题
Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...
- Android6.0动态获取权限
Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...
随机推荐
- CentOS6下4网口绑定双IP
1. 基础信息介绍 4个物理网口分别是:eth0,eth1(集成网卡),eth2,eth3(外置网卡) 其中, 内置网卡eth0和eth1绑定到bond0(192.168.224.2 ...
- MySQL 权限相关
# ============================= mysql 权限相关 =====================================================gran ...
- 安装和使用Docker(Windows7)
1.Boot2Docker Boot2Docker是实现Docker的软件.Windows下的Docker只适合于开发测试(大部分人也就是干开发测试的..),不适合于生产环境. Boot2Docker ...
- input 标签,不可更改
1.disabled 属性规定应该禁用 input 元素,被禁用的 input 元素,不可编辑,不可复制,不可选择,不能接收焦点,后台也不会接收到传值.设置后文字的颜色会变成灰色.disabled 属 ...
- Version Control/Git,SVN
一.Version Control 1.什么是Version Control 版本控制(Version Control)是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置 ...
- OSVOS 半监督视频分割入门论文(中文翻译)
摘要: 本文解决了半监督视频目标分割的问题.给定第一帧的mask,将目标从视频背景中分离出来.本文提出OSVOS,基于FCN框架的,可以连续依次地将在IMAGENET上学到的信息转移到通用语义信息,实 ...
- 云笔记项目-Spring事务学习-传播Requried
在准备好前期的项目搭建后,接下来就一个个的测试,首先测试事务传播的Required Service层两个实现类 Service层两个实现类,只是更换了方法事务传播的属性,其他都一样,后续测试也只修改传 ...
- Java框架spring 学习笔记(四):BeanPostProcessor接口
如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化前后后添加一些自己的逻辑处理. 编写InitHelloWorld.java package com.example.spring; ...
- C#使用Owin技术部署轻量级webApi服务
写在前面: 除了使用IIS可以启用WebApi之外,微软还提供了Owin技术,免除了IIS繁琐的部署配置,只需要运行编写好的程序,即可启用webApi服务,是不是很爽呢? 对于Owin技术的详细介绍这 ...
- python--第十七天总结(Django)
基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: pytho ...