文章目录

  • 1、运行时权限的分类
  • 2、运行时权限的声明方法
    • AndroidManifest.xml 文件中声明权限
    • 布局文件
    • 逻辑代码
    • 运行效果

完整权限列表
完整权限列表

1、运行时权限的分类

  • 普通权限
    普通权限指的是那些不会直接威胁到用户的安全和隐私的权限,对于这部分权限申请,系统会自动帮我们进行授权,不需要用户手动操作,比如在 BroadcastTest 项目中申请的权限就是普通权限。

  • 危险权限
    危险权限则表示那些可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人信息、定位设备的地理位置等,对于这部分权限申请,必须由用户手动授权才可以,否则程序就无法使用相应的功能。

  • 在这张表里的权限即为危险权限,除了要在 AndroidManifest.xml 文件中声明,还要申请运行时权限,不在这种表里则只需在 AndroidManifest.xml 文件中声明即可。

  • 注意:表格中每个权限都属于一个权限组,当一个危险权限被授权时,该权限所属的权限组里的其他权限会被自动授权。

2、运行时权限的声明方法

示例:申请拨打电话权限

AndroidManifest.xml 文件中声明权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/make_call"android:text="make call"android:textAllCaps="false"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

逻辑代码

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button makeCall = findViewById(R.id.make_call);makeCall.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {/*** 运行时权限的核心就是在程序运行过程中由用户授权我们去执行某些危险操作,程序是不可以擅自做主去执行这些危险操作的。* 第一步:判断用户是否已经授权,借助 ContextCompat.checkSelfPermission() 方法* 该方法接收两个参数:1、context,2、具体权限名* 利用该方法的返回值和 PackageManager.PERMISSION_GRANTED 作比较,相等表示已授权,否则没有授权* 已授权则直接进行操作,没有授权则调用 ActivityCompat.requestPermissions() 方法申请授权* 该方法接收三个参数:1、Activity实例,2、String 数组,存放要申请的权限名,3、请求码,唯一值即可*/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 (Exception 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:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {call();} else {Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;default:}}
}

运行效果

7-1、Android 运行权限相关推荐

  1. Android运行时权限

    Android运行时权限 参考网址:在运行时请求权限 在Android6.0之前应用请求权限都是在应用安装时将所有权限清单展示给用户,当用户选择安装就默认允许应用请求的所有权限,而Android6.0 ...

  2. Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,

                                      Android运行时权限设置帮助类BaseActivity  一.电话权限 package com.glandroid.smssen ...

  3. Android——SMS接收发短信与运行权限

    好久没写了,最近学习Android的相关知识,包括UI组件与布局.Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManager.S ...

  4. Android运行时权限终极方案,用PermissionX吧

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新. 各位小伙伴们大家早上好,不知道你的<第三行代码>已经读到哪里了? 有些朋友的阅读 ...

  5. Android运行时权限 1

    Android 运行时权限 一.Android 权限发展史 二.Android6.0 权限简介 1.Normal Permissions (普通权限) 2.Dangerous Permissions ...

  6. Android 9.0 修改搜狗为默认输入法,并且授予运行权限

    1.概述 在9.0的产品系统ROM定制化开发过程中,在android系统中默认的输入法就是不带中文输入法的,所以产品要求需要更换搜狗为默认输入法,这首选要更换系统默认的输入法 配置,然后在系统启动的时 ...

  7. Android数据手册02:android.permission权限请求汇总

    在Android开发中,当程序执行需要操作安全敏感项时,必须在androidmanifest.xml中声明相关权限请求. 比如,声明拨打电话的权限请求方法如下: 1 <uses-permissi ...

  8. Android踩坑日记:Android动态权限分析和解决方案

    关于运行时权限 在旧的权限管理系统中,权限仅仅在APP安装时询问一次,用户同意了这些权限App才能安装,APP一旦安装后就可以偷偷做很多不为人知的事情. 我们知道从Android6.0开始,App可以 ...

  9. android permission权限与安全机制解析(上)

    目录(?)[-] uses-permission 自定义permission permission标签 permission-tree标签 permission-group标签 安全机制 组件权限 权 ...

最新文章

  1. The destination folder does not exist or is not writeable
  2. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)
  3. 基于socket的简单p2p聊天项目
  4. Android 不同阶段 Logo 显示
  5. php mysql 开发微博_3款php+mysql国产微博程序推荐
  6. 机器学习-分类之决策树原理及实战
  7. docker 添加端口映射_Docker快速搭建PHP开发环境详细教程
  8. 【Python数据结构】——并查集的实现(查找、合并、集合、实例)
  9. Python生成多个浮点数、二维浮点数
  10. CF刷刷水题找自信 2
  11. powerbi python词云图_Power BI 标签云可视化
  12. linux 小度 驱动_糯米WiFi安装Linux驱动 (同时支持百度WiFi、小米WiFi、腾讯全民WiFi、360WiFi)...
  13. px和毫米的换算_px与厘米换算(px怎么转换为cm)
  14. 楼市降价潮蔓延至二三线城市 土地多底价成交
  15. hdu4311 Meeting point-1 求最小的曼哈顿距离和
  16. input和textarea中字体样式不同的解决方法
  17. Python小白的数学建模课-19.网络流优化问题
  18. 微软的winget包管理器
  19. Predicting Buffer Overflow Vulnerabilities through Mining Light-Weight Static Code Attributes
  20. 普通耳机的多源感知功能(智能耳机)

热门文章

  1. 石子游戏Kam(bzoj 1115)
  2. 史上最直白易懂的五险一金介绍,初入职场的新人必知必懂!
  3. 将阿拉伯数字转化成大写的人民币数字
  4. 评测报告的结论如何写?
  5. python爬虫! 网站维护人员:真的求求你们了,不要再来爬取了,受不了了!!
  6. 分析动态网页客户-服务器工作过程,网页制作中asp技术的应用
  7. 使用FloatingActionButton滑动消失后不再显示
  8. MyEclipse 6.5 下载及注册
  9. 绿麻雀网贷系统通用注入分析
  10. RDTSC指令介绍与使用