Android 如何实现动态申请权限

OverView

今天在复习的时候,突然复习到我们的相机操作,但是对于相机操作,对于我来说比较复杂的是对于权限的操作。所有我们需要对我们的相机操作进行一些笔记的整理,加深记忆。

开发环境

Android Studio 3.6

Android 11(R)

该笔记使用 java

权限申请的基础知识

学习自:GOOGLE ANDROID DEVELOPERS

对于我们所需要申请的权限我们需要进行如下的操作。

我们需要将所有需要申请的权限添加到App/src/main/AndroidManifest.xml文件中。

但是权限也是分为常规的权限和危险的权限的,对于常规的权限我们的只需要在AndroidManifest.xml文件中添加就可以使用了,但是对于一些被视为危险权限的,我们就需要让用户来选择时候同意申请。

接下来我们就看一下如何操作我们的危险权限吧。

如何判断是否申请了权限

按照国际惯例我们先看一下源代码:

private boolean checkPermission() {
  //first we need check this Drive has? CAMERA Permission
  if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, CHECK_PERMISSION_CAMERA);
    return false;
  } else
    return true;
}

这里我们使用我们的相机权限作为实例。

首先我们需要判断我们的使用有相机权限,可以使用,申请完成后我们需要进行权限申请。我们将我们所需要的权限申请,并且传入我们的指定代码。这里我的CHECK_PERMISSION_CAMERA的值为1。

然后就是我们需要重写我们的系统方法onRequestPermissionsResult

这个方法可以很好的来判断用户时候同意了我们的权限申请。

首先来看看我们的源代码:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  switch (requestCode) {
    case CHECK_PERMISSION_CAMERA: {
      if (grantResults.length > 0 && permissions[0].equals(PackageManager.PERMISSION_GRANTED)) {
        Toast.makeText(this, "The camera permission application wes successful!", Toast.LENGTH_SHORT).show();
        dispatchTakePictureIntent();
      } else {
        Toast.makeText(this, "The camera permission application wes failed!", Toast.LENGTH_SHORT).show();
      }
    }
    break;
  }
}

这个就是我判断用户时候同意我们申请相机权限的全部代码了。

这个也是非常的简单,我们通过在申请的时候传入的识别代码来判断,如果代码通过后我们需要通过验证grantResults的长度和权限数组中的索引位置来判断用户有没有同意我们的权限申请。如果同意了我们就可以进行下一步操作。

这部分代码还是非常的简单的。关于动态权限的申请还是非常的简单的。

以上这篇Android 如何实现动态申请权限就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android 在程序运行时申请权限的实例讲解

    这里我们以拨打电话申请权限来写个小例子,也就是CALL_PHONE,因为拨打电话会涉及用户手机的资费问题,因而被列为了危险权限,在Android6.0系统出现之前,拨打电话功能的实现其实非常简单,修改activity_mainxml中的代码,如下: <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android=&qu

  • Android手动检查并申请权限方法

    Android权限一般是在AndroidManifest.xml中声明,在安装或首次使用的时候系统会自动提示用户是否提供权限 Android官方文档: Then, when the application is installed on the device, the installer determines whether or not to grant the requested permission by checking the authorities that signed the a

  • android6.0权限动态申请框架permissiondispatcher的方法

    1,添加依赖 在project的build.gradle文件中添加 dependencies { classpath 'com.android.tools.build:gradle:2.1.2' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } 在module的build.gradle中添加 apply plugin: 'android-apt' ....... dependencies { .... compile 'co

  • android 6.0 写入SD卡的权限申请实例讲解

    6.0的手机对于写入手机需要申请权限的 我做了如下处理 下面我贴出代码 package com.example.admin.sdapplication; import android.Manifest; import android.app.Dialog; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Build; import android

  • React-Native之Android(6.0及以上)权限申请详解

    为什么Android要申请权限 简单说下在Android6.0及6.0以上一些google认为涉及"危险和用户隐私"的一些权限不仅要做清单文件(android/app/src/AndroidMainfest.xml)里面申请,还有单独调用api,去让用户选择是否同意你申请这个权限. 例如:你想要你的app有读写手机外置内存卡权限,那么你需要在清单文件里面加下面两行看字母应该懂的吧.但如果你的(android/app/build.gradle)里的 android{defaultConf

  • Android 6.0动态权限申请教程

    PermissionManage 项目地址:https://github.com/why168/AndroidProjects/tree/master/PermissionManage 介绍 如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则应用在运行时向用户请求权限. 如果设备运行的是 Android 5.1(API 级别 22)或更低版本,并且应用的 targetSdkVersion 是 22 或更

  • Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法

    为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限. 蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取 需要在配置文件中申请两个权限: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="an

  • Android超清晰6.0权限申请AndPermission

    Android超清晰6.0权限申请AndPermission的具体实现代码,供大家参考,具体内容如下 前言 这是我经常使用的框架,原因: 1.思路清晰 2.实现方便 开始 准备工作 导包 compile 'com.yanzhenjie:permission:1.0.7' 然后就可以使用了,贼简单 使用 第一步 findViewById(R.id.selectPic).setOnClickListener(new View.OnClickListener() { @Override public

  • Android 如何实现动态申请权限

    OverView 今天在复习的时候,突然复习到我们的相机操作,但是对于相机操作,对于我来说比较复杂的是对于权限的操作.所有我们需要对我们的相机操作进行一些笔记的整理,加深记忆. 开发环境 Android Studio 3.6 Android 11(R) 该笔记使用 java 权限申请的基础知识 学习自:GOOGLE ANDROID DEVELOPERS 对于我们所需要申请的权限我们需要进行如下的操作. 我们需要将所有需要申请的权限添加到App/src/main/AndroidManifest.x

  • Android中不支持动态申请权限的原因

    作为Android开发者,为程序增加权限是在正常不过的事情了,做法必然是在mainifest中,写入类似这样<uses-permission android:name="android.permission.INTERNET" />的信息. 以静态申请的形式来完成. 于是这里我想抛出一个问题,Android平台支持动态申请权限么. 相信很多人回答都是不支持,当然这个答案是对的,但是为什么不支持呢,知其然更要知其所以然.了解其原因还是相当有必要的. 原因列举 Android没

  • Android registerForActivityResult动态申请权限案例详解

    前言 这几天在做一个小工具app,结果在fragment里面动态申请权限提示原有的申请方法已经弃用,还画了很明显的删除线...这叫一个强迫症的我怎么受得了.赶紧网上找资料也找不出什么结果,看了官方文档才发现了有registerForActivityResult这么一个神奇好用的函数,可以代替我们现有的startActivityForResult和权限申请函数. 那么下面就分两种情况来讲一下如何使用这个函数动态申请权限. 一.申请单个权限 首先,我们需要定义一个launcher: Activity

  • Android6.0动态申请权限所遇到的问题小结

    白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒. 首先要知道哪些坑,就得先了解一些定义和基本使用方式. 那么先介绍一下动态申请的权限分组情况. 下面的权限组是由谷歌官方定义的,目的是在申请权限时,只要用户允许同一权限组的任意一条权限,那么该组的其他权限也就默认是允许的.不过据高人介绍,在使用时最好是用到哪个权限就具体的请求该权限,因为保不齐哪天谷歌一高兴就把权限组换了甚至删了 group:android.permission-group.CONTACTS permissio

  • Android无需申请权限拨打电话的两种方式

    Android打电话有两种实现方法: 第一种方法,拨打电话跳转到拨号界面.源代码如下: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data = Uri.parse("tel:" + "135xxxxxxxx"); intent.setData(data); startActivity(intent); 第二种方法,拨打电话直接进行拨打,但是有些第三方rom(例如:MIUI),不会直接进行拨打,而是要用户进

  • Android 6.0动态权限及跳转GPS设置界面的方法

    1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 然后java代码中动态申请 //动态申请权限的测试方法 public void test() { // 要申请的权限 数组 可以同时申请多个权限 Stri

  • 详解Android数据存储之Android 6.0运行时权限下文件存储的思考

    前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi

随机推荐