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时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...
随机推荐
- NE76003单片机调试DS18B20 步骤
一.硬件部分 GND脚接地: DQ脚接P03,外加4K7上拉电阻: VCC脚接3.3v供电: 二.软件部分 1.配置P03为准准双向 IO类型: void Init_power_gpio(void){ ...
- 解题(Solution -4Sum)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- Python学习—数据库篇之索引
一.索引简介 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可,对于索引,会保存在额外的文件中.在mys ...
- Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean (default-clean) on project
在maven项目中 启动了2个tomcat,只能启动一个.
- 牛客小白月赛13 小A的回文串(Manacher)
链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 题目描述 小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的.所以小A只想知道给定的一个 ...
- 19-01【vmware machine】虚拟机无法联网访问
问题 我本地的虚拟机上没办法访问外网,然后搞了很久很久,最终解决了. 现象 A,电脑持续运行了三天,也没有复杂的环境调整的情况下.我本地的ubuntu(使用VMWare machine创建的),突然没 ...
- python字符串处理内置方法一览表
python字符串处理内置方法一览表 序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar) 返回一个指定的宽度 widt ...
- CentOS7 下安装GUI图形界面GNOME
在安装Gnome包之前,需要检查一下网络是否有网络(使用ping www.baidu.com) 一.先装X windows,-y表示参数同意所有软件安装操,当出现 Complete!说明这里安装成功了 ...
- Python MD5算法使用
## md5算法简介 1. **简介** MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值 ...
- window下maven的环境搭建
一.下载 官网下载地址 二.maven的安装配置 1.环境变量的配置 1)新建环境变量MAVEN_HOME,值如下: D:\install\develop\apache-maven- 2)修改环境变量 ...