前言

Android6.0版本以前,往往是应用程序需要什么权限直接在manifest.xml中直接声明,当你安装程序的时候,如果不想让该程序使用某种权限,唯一的办法只能是不装这个应用,但是我们生活中离不开应用,只能是默默的接受无耻的权限要求,比如一个聊天软件要获取你的短信、彩信等权限,明明就是明抢,我们平时又使用不到这些权限,Google也考虑到了这个问题,所以在Android6.0之后加入了运行时权限,把权限分为危险权限和普通权限。

  1. 普通权限
    不会直接威胁到用户的安全和隐私的权限

  2. 危险权限
    可能会触及用户的隐私、或者对用户的设备安全性造成影响的权限,危险权限总共有9组24个权限

Demo:模拟直接拨打电话

  1. 首先在Manifest.xml中添加拨打电话权限
<!--拨打电话权限-->
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
  1. main_activity.xml文件中添加布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.sean.css.runtimepermissiontest.MainActivity"><Button
        android:id="@+id/make_call"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="拨打10080" />
</RelativeLayout>
  1. MainActivity.xml文件中
package com.sean.css.runtimepermissiontest;import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.make_call);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//判断是否已经获得了拨打电话权限if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {//没有获得拨打电话权限就去请求获得该权限,第一个参数是上下文对象,第二个参数是权限名称,第三个参数是请求码ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);} else {call();}}});}private void call() {try {Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);} catch (SecurityException e) {e.printStackTrace();}}/*** 申请权限回调** @param requestCode* @param permissions* @param grantResults*/@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case 1://如果是返回的请求码是1,知道是申请拨打电话权限的回调。//授权的结果在grantResults中,如果长度大于0并且里面的值表示以获取该权限,就直接拨打电话//否则跳出提示,告诉用户为什么需要该权限,让用户自己开启权限if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {call();} else {Toast.makeText(this, "你需要允许拨打电话权限才能进行下面的操作", Toast.LENGTH_SHORT).show();}break;}}}

当我们申请运行时权限的时候,是不是有点似曾相识的感觉呢?
我们在使用开启新的Activity并且需要新的Activity返回给我们值的时候,和申请权限的是相似的,这样就好理解多了。

其他

现在的开源项目有很多已经帮我们封装好了申请运行时权限,我们可以直接拿来用,比如easypermissions等,不过还是要知道其中的原理比较好。

Android6.0的运行时权限处理,特此记录。

Android6.0运行时权限处理相关推荐

  1. 获取权限android sync,GitHub - AndSync/XPermissionUtils: 可能是最精简的Android6.0运行时权限处理方式,支持Rationale提示...

    # XPermissionUtils 可能是最精简的Android6.0运行时权限处理方式,支持Rationale提示,只有一个类,100行代码,所有弹窗等操作由用户自行处理,在Demo中也有提供代码 ...

  2. 这可能是最精简的Android6.0运行时权限处理,百行代码的工具类,支持Rationale,附:各种权限详细处理

    0x00:前言 对于Android6.0运行时权限的处理方式网上有很多,包括注解,RxJava等等.一直没有正面提到我关心的问题–如果我不在Activity或者Fragment里面,需要运行时权限该怎 ...

  3. Android6.0运行时权限解决方案

    今天在测试APP的时候发现部分手机APP定位权限使用不了.看了一下机型都是Android6.0以上版本的Android手机. 之前就听说Android6.0以上版本权限管理更严格了,没想到今天踩坑了. ...

  4. Android6.0运行时权限(危险权限列表)

    从 Android 6.0(API 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予.这种权限机制可以让用户更好的管理应用的权限,保障用户隐私. Android将权限分为普通权限和 ...

  5. Android8.0运行时权限策略变化和适配方案

    版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com Android8.0也就是Android O即将要发布了,有很多新特性,目前我们可以通过Android ...

  6. Android6.0执行时权限解析,RxPermissions的使用,自己封装一套权限框架

    Android6.0执行时权限解析,RxPermissions的使用.自己封装一套权限框架 在Android6.0中,新添加了一个执行时的权限,我相信非常多人都已经知道了.预计也知道怎么用了,这篇博客 ...

  7. Android 8.0 运行时权限策略变化和适配方案

    Android8.0也就是Android O即将要发布了,有很多新特性,目前我们可以通过AndroidStudio3.0 Canary版本下载Android O最新的系统映像的Developer Pr ...

  8. Android 8.0学习(18)--- Android8.0运行时权限策略变化和适配方案

    Android8.0运行时权限策略变化和适配方案    在 Android O 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用.对 ...

  9. Android 6.0 运行时权限处理完全解析

    一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http:// ...

最新文章

  1. 超图桌面版制作分段专题图学习
  2. java 判断是否为null_说说Java 对象不使用时为什么要赋值为 null?
  3. linux kernel编译 undefined reference to `__ae
  4. 2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现
  5. ffmpeg运行在服务器上,FFMPEG安装在服务器上
  6. Python 之将小姐姐画在Excel上
  7. iOS当期时间和日期选择器
  8. 用JEP+SpringBoot进行动态公式处理计算
  9. RGB颜色对照表以及十六进制
  10. 2.1 八边形绘制
  11. GraphX入门简介
  12. 初夏小谈:叩响C++世界的大门
  13. [2021绿城杯] [Misc] 流量分析 + cobaltstrike 流量解密
  14. OpenCV-图像色温
  15. Python下进程同步之互斥锁、信号量、事件机制
  16. 【LaTeX 问题解决方案】I couldn‘t open file name `.aux‘
  17. python营业数据分析_基于pandas python的美团某商家的评论销售(数据分析)
  18. 如何将本地的项目上传到git
  19. luci与页面的数据交互
  20. 对云计算及云服务的理解

热门文章

  1. springboot接入华为云短信
  2. 开源任务管理平台TaskManager介绍
  3. 安装Chrome失败
  4. XBOX360用HDMI线有图像没声音怎么办
  5. ABAQUS 求解应力强度因子
  6. 导热系数仪 德国PSL 德国培赛乐 快速阻垢性能测试仪 抗车辙剂 摇摆槽 水合物摇摆槽 水合物相变的固-液-气多相流动 水合物阻聚剂分析 沥青硫化氢分析 沥青絮凝点 沥青絮凝点测定仪 油田注水阻垢剂
  7. mysql语句大小写要求_mysql踩坑(一)-大小写规则
  8. 使用echart画出渐变色饼图(圆环图环形渐变)
  9. 0基础单片机入门知识:怎么使用数字万用表以及注意事项
  10. 3D变电站vr建模三维展示可视化管理系统