android 权限动态申请

名字其实有点让人感觉高大上"权限动态申请",其实也没有什么,

以前做Android程序的时候,比如需要打开摄像头

那么需要在

 

 

然后就可以了,

但是Android6.0之后呢,有些权限必须手动让用户同意才可以,哪些权限需要用户手动同意,哪些不需要这里大家自行百度

现在说一下

直接上程序吧

public void checkPermission(){int targetSdkVersion = 0;String[] PermissionString={Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA};try {final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);targetSdkVersion = info.applicationInfo.targetSdkVersion;//获取应用的Target版本} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();
//            Log.e("err", "检查权限_err0");
        }if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//Build.VERSION.SDK_INT是获取当前手机版本 Build.VERSION_CODES.M为6.0系统//如果系统>=6.0if (targetSdkVersion >= Build.VERSION_CODES.M) {//第 1 步: 检查是否有相应的权限boolean isAllGranted = checkPermissionAllGranted(PermissionString);if (isAllGranted) {//Log.e("err","所有权限已经授权!");return;}// 一次请求多个权限, 如果其他有权限是已经授予的将会自动忽略掉ActivityCompat.requestPermissions(this,PermissionString, 1);}}}/*** 检查是否拥有指定的所有权限*/private boolean checkPermissionAllGranted(String[] permissions) {for (String permission : permissions) {if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {// 只要有一个权限没有被授予, 则直接返回 false//Log.e("err","权限"+permission+"没有授权");return false;}}return true;}//申请权限结果返回处理
    @Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == 1) {boolean isAllGranted = true;// 判断是否所有的权限都已经授予了for (int grant : grantResults) {if (grant != PackageManager.PERMISSION_GRANTED) {isAllGranted = false;break;}}if (isAllGranted) {// 所有的权限都授予了Log.e("err","权限都授权了");} else {// 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮//容易判断错//MyDialog("提示", "某些权限未开启,请手动开启", 1) ;
            }}}

 

 

程序启动的时候检查权限

 

现在说一下流程

 

 

说一下,如果调用这个

就会执行

    private void MyDialog(final String str1, final String str2, final int index) {android.support.v7.app.AlertDialog.Builder AlertDialogBuilder = new android.support.v7.app.AlertDialog.Builder(MainActivity.this, R.style.MyDialog);View mView = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_config_button2, null);final TextView mTextView1 = mView.findViewById(R.id.tvdogcon1);final TextView mTextView2 = mView.findViewById(R.id.tvdogcon2);final Button mButton1 = mView.findViewById(R.id.btdogcon1);final Button mButton2 = mView.findViewById(R.id.btdogcon2);mButton2.setText("前去设置");mButton2.setTextColor(Color.BLUE);mButton1.setText("取消");mButton1.setTextColor(Color.BLACK);mTextView1.setText(str1);mTextView2.setText(str2);AlertDialogBuilder.setView(mView);//对话框加载视图
final android.support.v7.app.AlertDialog alertdialogbuilder = AlertDialogBuilder.create();alertdialogbuilder.setCanceledOnTouchOutside(false);//点击外围不消失
alertdialogbuilder.show();mButton1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {alertdialogbuilder.dismiss();}});mButton2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {alertdialogbuilder.dismiss();Intent intent = new Intent();intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");intent.setData(Uri.fromParts("package", getPackageName(), null));startActivity(intent);}});}

应用设置界面

 

 

 

然后就没了,

现在说一下BUG问题

 大家百度

checkSelfPermission

总是返回 false  很多说这个问题的

这就导致一个问题,如果用户进入 应用设置界面 设置了允许对应的权限  然后回到程序,

结果...总是调用这个....这就太奇葩了

 

 后来我发现,同时满足这两条条件再检测就不会了,可以准确的检查,

但是我重复安装了几次我的APP,还是有个奇怪的问题,前面我都拒绝,然后就会提示进入  应用管理界面

按理说默认应该是询问状态,,但是却是  显示的允许......然后发现必须自己重复点击一下拒绝,然后再点击一下允许

回到界面后才会正常........按理来说用户不会像我似的,因为我一直在调试

但是确实是一个问题.....

 

 

 

 

 

 但是还有个问题,那天让一个朋友测试,发现另一个问题,,如果在安装的时候就修改,不允许任何权限,,那么安装完以后,也不会进入

 

 

 所以最终决定,把这里屏蔽了

因为现在还不能准确的判断

以后判断呢只能是异常捕获了........

假如说,用户没有同意摄像头权限,然后执行摄像头的一些程序的时候肯定会报错

然后在异常捕获里提醒用户  跳转到应用权限管理里面去打开权限

 

转载于:https://www.cnblogs.com/yangfengwu/p/9304373.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php mysql installed_CentOS在使用yum install php-mysql安装php时报错的解决方法

由于此项目的apache只是用于下载功能和安装phpAdmin来查找数据库,而且之前已经安装了Mysql 5.6,于是在部署是都是直接使用yum命令方法安装。但在使用yum install php-mysql时报了一大堆的错误:from install of mysql-libs-5.1.69-1.el6_4.x86…

ppt转html5 带动画_我复刻了IPhone12这页发布会PPT

今年苹果发布会没有看,但是最近看到三石兄发了一篇关于发布会现场的这页PPT复刻的推文,它介绍的是利用直线辅助的方法来完成。三石兄相关推文:iPhone12发布会PPT,你也能做!​mp.weixin.qq.com那么今天我们主要介绍如何…

tablemodel dapter区别

2019独角兽企业重金招聘Python工程师标准>>> 简单的原则: 如果查询部分字段用adapter 如果多表查询用adapter 如果考虑sql注入用adapter 如果增加、删除、修改、查询单个表的全部字段用tablemodel 转载于:https://my.oschina.net/shunshun/blog/92668

面经——华为联发科小米兆易创新(2020年秋招嵌入式软件)

摘自:2020年秋招嵌入式软件面试过程总结(华为联发科小米兆易创新) 作者:嵌入式与Linux那些事 发布时间:2020-12-19 21:07:27 网址:https://blog.csdn.net/qq_16933601/article/details/111296224?utm_medi…

【error】Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs.

前言 使用matlab通过摄像头获取图像进行处理; 问题描述 使用matalb调用摄像头时出现错误: >> imaqhwinfo Warning: No Image Acquisition adaptors found. Image acquisition adaptors may be available as downloadable support packages. Open S…

安卓短信加密_发短信控制车辆!苹果发布ios14,手机可作车钥匙

1.苹果宣布今后iPhone和Apple Watch可以作为开启和启动车辆的数字钥匙;2.支持该系统的第一款汽车将会是宝马5系;3.“车钥匙”功能将于下月推送,iOS13上也可使用;4.车主可以通过Apple的iMessage短信应用程序与其他五个人共享密钥&a…

myisam和innodb

myisam: myisam不支持事务处理、单进程处理数据,对大数据备份能力不足 innodb: innodb支持事务处理、多进程处理数据,对大数据备份能力较强 这两种引擎各有特点请根据自己的硬件和公司的实际情况选用。转载于:https://blog.51cto.…

ubuntu14测试mysql_在ubuntu14.04中安装Hammerora-2.10——测试mysql、oracle性能够的工具...

Hammerora—The Open Source Oracle Load Test Tool首先介绍一下Hammerora,从创作者对这个工具的标题描述可以看出,Hammerora是一款Oracle数据库负载测试工具。该工具可以在Oracle 8i、9i和10g等版本上使用。当前可以用在Linux/Unix和Windows上。初步实现…

哇嘎显示等待无服务器,vagaa搜索不到资源怎么回事?vagaa哇嘎搜索没反应的解决方法...

vagaa哇嘎是一款资源搜索神器,使用非常的简单,但是有网友反映,使用vagaa哇嘎搜索不到东西了,这是怎么回事,如果点击vagaa搜索没反应可能是搜索的问题,也可能是其他问题,一起来看看具体的解决方法…

内存四区(代码区 静态区 栈区 堆区)

参考:内存四区(代码区 静态区 栈区 堆区) 作者:今天天气眞好 发布时间: 2021-04-01 18:09:13 网址:https://blog.csdn.net/qq_51118175/article/details/115379779?spm1001.2014.3001.5501 内存相关博文&a…

webpack4 入门配置研究

1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g 1.1)输密文的密码(电脑开机) 1.2)安装成功 2. 输入命令mkdir config dist src创建三个文件夹 3.输入命令npm init -y 4. 输入命令touch dist/index.html src/…

王者荣耀6月23服务器维护,王者荣耀6.23维护到什么时候?6月23日长枪掠火版本异常介绍...

王者荣耀6.23维护到什么时候?可能很多玩家对于今天更新的时间还不太清楚,下面就让浏览器小编为大家带来,王者荣耀6月23日长枪掠火版本异常介绍。亲爱的召唤师: “长枪掠火”版本更新后,我们收到反馈,本次在…

mysql ignore详解_MySQL replicate-ignore-db详解

1:官方的解释是:在主从同步的环境中,replicate-ignore-db用来设置不需要同步的库。解释的太简单了,但是里面还有很多坑呢。生产库上不建议设置过滤规则。如果非要设置,那就用Replicate_Wild_Ignore_Table: mysql.%吧。…

【转】_declspec(naked) 使用

// 将本文完整拷贝, 然后在VC6 下建立控制台程序, 可直接运行~ 看到结果后再来阅读此文 // 文章出处甚多, 已不能列出所有连接 #include "stdafx.h"#include <stdio.h> /* >>>>>> _declspec(naked) 使用 <<<<<<<…

采样频率和带宽的关系_基于矢量网络分析仪的 TDR 与传统采样示波器 TDR 之间的测量性能和优势比较...

最近几年随着多 Gbps 传输的普及&#xff0c;数字通信标准的比特率也在迅速提升。比特率的提高使得在传统数字系统中不曾见过的问题显现了出来。诸如反射和损耗的问题会造成数字信号失真&#xff0c;导致出现误码。另外由于保证器件正确工作的可接受时间裕量不断减少&#xff0…

【模板】并查集

只是再自己打一遍熟悉一些 #include<iostream> #include<cstdio> using namespace std; #define tcl(a,b,c) for(ab;a<c;a) int f[100001]; int get(int x) {if(f[x]x)return x;else {f[x]get(f[x]);return f[x];} } void join(int a,int b) {int t1,t2;t1get(a…

mysql的分片系统_MySQL分片

shardingMySQL5以后提供了Sharding的能力&#xff0c;其目的就是为突破单节点数据服务器I/O能力限制&#xff0c;解决数据库Scale Out水平扩展的问题。通过Sharding可以将数据按照物理位置贴合用户分布&#xff0c;得到更加快速的响应&#xff1b;操作庞然大物总是让人头疼&…

在线普通话转粤语发音_香港最新悬疑侦探剧福尔摩师奶,粤语知识好难

150元系统学粤语付费咨询微信2019年2月25日香港TVB上了一部新剧《福尔摩师奶》&#xff0c;该剧以19世纪末至20世纪初的油麻地为背景&#xff0c;讲述一个女探长祖迪费查(陈松伶饰)破案的故事。/ 盏鬼 // 识少少 /①普通话的“嫉妒、受不了”&#xff0c;粤语会说&#xff1a;唔…

Java web小项目_个人主页(1)—— 云环境搭建与项目部署

摘自&#xff1a;Java web小项目_个人主页&#xff08;1&#xff09;—— 云环境搭建与项目部署 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-26 23:59:39 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115104493?spm1001.2014.3001…

网页搜索怎么显示排名_深圳seo搜索排名优化效果怎么样

效果怎么样l31b10seo搜索排名优化深圳&#xff0c;企业商家为了自己的网站有更好的排名&#xff0c;获得更好的流量&#xff0c;往往会采用SEO优化&#xff0c;那么SEO优化有哪些方法呢&#xff1f;或者是哪些方法更有效呢&#xff1f;这是一个多媒体的时代&#xff0c;内容元素…