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

以前做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

android 权限动态申请相关推荐

  1. android manifest 权限组,Android的单个或多个权限动态申请

    前言 在Android 6.0(API 级别 23)以下申请权限是非常简单的,直接在AndroidManifest.xml这个配置文件中加入申请权限的列表就可以了,比如我要申请四个权限,如下: 但是在 ...

  2. Android 系统(81)---Android permission 动态申请、授权

    Android permission 动态申请.授权 Android permission 学习 本篇文章介绍android permission系统,并介绍android 6.0 .7.0.8.0 ...

  3. android动态申请权限第三方库,Android 关于动态申请权限

    第一种方式:引入三方库,利用第三方申请权限 1.引入三方库: api'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar' 2.调用(当然你需要什 ...

  4. Android 10动态申请读写权限

    1.在AndroidManifest.xml中添加权限 <?xml version="1.0" encoding="utf-8"?> <man ...

  5. Android如何动态申请权限(打电话)

    Android动态申请权限(打电话) android 高版本有些权限除了在manifest文件中静态添加,还需要动态请求 具体请求方法如下(以拨打电话为例): 方法1: 这种方法是直接呼出电话 在ma ...

  6. android位置权限动态申请,DELPHI安卓定位权限申请

    DELPHI安卓定位权限申请 安卓8及以后版本的权限分为静态和动态申请2部分,而之前的安卓版本只需要静态申请权限. 1)静态申请定位权限: 2)动态申请定位权限: uses System.Permis ...

  7. flutter ios permission_handle权限动态申请

    文章目录 配置 permission_handle Android项目 IOS项目 代码 网上都是针对安卓的教程,以下是作者使用Flutter打包在iphone上运行动态申请权限的实战记录. 项目在: ...

  8. Qt for Android 动态申请权限

    前言 Qt 随着版本的不断更新,提供了越来越多的接口用于移动端的开发,这里要说的是关于 Android 上权限动态申请的问题,直接在 C++端调用 Qt 的接口即可以实现. 正文 Qt 申请Andro ...

  9. android 权限管理之判断禁止后不再提示

    android 权限管理之判断禁止后不再提示 我看到了许多博客中写到了单独去判断shouldShowRequestPermissionRationale()方法的值去判断为是否为不再提示,结果遇到了小 ...

最新文章

  1. 限制TextBox输入的内容
  2. Maven——第1章 Maven 介绍
  3. linux+dhcp服务的安装包,服务器_Linux教程:配置DHCP服务器方法介绍,  1.安装dhcp软件包 #rpm nd - phpStudy...
  4. Safari 版本回退方法
  5. Springboot07配制数据统一返回格式以及定义统一的异常处理类
  6. python 百分比输出_获取Linux系统负荷百分比的python脚本
  7. 四种方法下载网络文本数据到本地内存
  8. 信号检测与估计理论 pdf_CVPR2020|行人检测与重识算法推荐论文源码大盘点
  9. 海康工业相机的一些坑(USB接口的相机连上halcon17后,客户端无法打开相机,错误是无驱动,但是驱动是好好的,如何解决)
  10. 呼叫中心系统功能其优势
  11. 最新二次开发知宇自动发卡系统源码/全网对接/功能齐全
  12. html5怎么给标题居中,html5标题居中 Html5如何使div里面文字在水平垂直居中对齐...
  13. 什么是cosmos?
  14. 海贼王剧场版:Z 剧情详解(附TS无字幕版地址)
  15. 路由控制配置 peer as- number命令解析
  16. Keras 简介与优势
  17. Wim技术之Wim文件的制作
  18. 数值计算——线性最小二乘问题
  19. 李炎恢ECMAScript6 / ES6+(一)
  20. 编译原理学习笔记(二十六)~习题:构造基于LR(0)、LR(1)项目的识别活前缀的DFA

热门文章

  1. 天梯赛2016-L2
  2. 234. Palindrome Linked List
  3. [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程
  4. 碰到一个微软的bug:CWinAppEx::GetString
  5. [转]你打算如何提升自己?
  6. 01 React初步认知、React元素、渲染、工程化
  7. 使用glew和glad 新建窗口
  8. 第八次作业——系统设计与团队分配(个人)
  9. 封装之--通过类中公有方法访问私有成员变量
  10. 如何手动给Docker容器设置静态IP