程序运行是的权限分为两种,一种是普通权限,一种是危险权限。普通权限的话可以直接使用,只有危险权限需要询问用户的同意。

危险权限分组以及组内权限如下:

注:危险权限同一组内有一项权限被授权,则一组权限都被授权。

 1 group:android.permission-group.CONTACTS
 2   permission:android.permission.WRITE_CONTACTS
 3   permission:android.permission.GET_ACCOUNTS
 4   permission:android.permission.READ_CONTACTS
 5
 6 group:android.permission-group.PHONE
 7   permission:android.permission.READ_CALL_LOG
 8   permission:android.permission.READ_PHONE_STATE
 9   permission:android.permission.CALL_PHONE
10   permission:android.permission.WRITE_CALL_LOG
11   permission:android.permission.USE_SIP
12   permission:android.permission.PROCESS_OUTGOING_CALLS
13   permission:com.android.voicemail.permission.ADD_VOICEMAIL
14
15 group:android.permission-group.CALENDAR
16   permission:android.permission.READ_CALENDAR
17   permission:android.permission.WRITE_CALENDAR
18
19 group:android.permission-group.CAMERA
20   permission:android.permission.CAMERA
21
22 group:android.permission-group.SENSORS
23   permission:android.permission.BODY_SENSORS
24
25 group:android.permission-group.LOCATION
26   permission:android.permission.ACCESS_FINE_LOCATION
27   permission:android.permission.ACCESS_COARSE_LOCATION
28
29 group:android.permission-group.STORAGE
30   permission:android.permission.READ_EXTERNAL_STORAGE
31   permission:android.permission.WRITE_EXTERNAL_STORAGE
32
33 group:android.permission-group.MICROPHONE
34   permission:android.permission.RECORD_AUDIO
35
36 group:android.permission-group.SMS
37   permission:android.permission.READ_SMS
38   permission:android.permission.RECEIVE_WAP_PUSH
39   permission:android.permission.RECEIVE_MMS
40   permission:android.permission.RECEIVE_SMS
41   permission:android.permission.SEND_SMS
42   permission:android.permission.READ_CELL_BROADCASTS

申请权限:

以获取拨打电话call权限为例。

首先在 AndroidManifest.xml 文件中声明所需的权限:

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

在布局文件中设置一个按钮,然后在MainActivity中编写相关申请权限的逻辑。

申请主要分三个部分:

1.设置按钮点击事件,通过checkSelfPermission方法来判断是否有相关权限,如果没有权限,则调用requestPermissions方法来询问用户是否授权,如果有权限,则直接调用call()来进行执行。

2.在第一步调用完requestPermissions方法后,无论用户选择授权与否,都会回调到onRequestPermissionsResult()方法中,授权结果封装在grantResults参数中,所以判断授权结果,如果授权同意,则调用call方法,不同意则提示未获得授权。

3.call方法具体,使用隐身intent方法,动作为拨打电话,并设置相应电话号码,执行intent动作。为了防止程序奔溃,这些放在try方法里执行。

代码如下:

 1 public class MainActivity extends AppCompatActivity {
 2
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_main);
 7
 8         /*设置按钮点击事件,通过checkSelfPermission方法来判断是否有相关权限
 9         * 如果没有权限,则调用requestPermissions方法来询问用户是否授权
10         * 如果有权限,则直接调用call()来进行执行*/
11         Button makeCall = (Button) findViewById(R.id.make_call);
12         makeCall.setOnClickListener(new View.OnClickListener() {
13             @Override
14             public void onClick(View view) {
15                 /*该方法传入两个参数,第一个是context,第二个是要获得的权限名。
16                 将返回值与PackageManager.PERMISSION_GRANTED做比较*/
17                 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)
18                         != PackageManager.PERMISSION_GRANTED) {
19                     /*为获得授权,调用requestPermissions方法向用户申请授权,
20                     传入三个参数:context,获得的权限名字符串,以及请求码,唯一值即可。*/
21                     ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
22                 } else {
23                     call();
24                 }
25             }
26         });
27     }
28
29     /*call方法具体,使用隐身intent方法,动作为拨打电话,并设置相应电话号码,执行intent动作。
30     * 为了防止程序奔溃,这些放在try方法里执行。*/
31     private void call() {
32         try {
33             Intent intent = new Intent(Intent.ACTION_CALL);
34             intent.setData(Uri.parse("tel:10086"));
35             startActivity(intent);
36         } catch (SecurityException e) {
37             e.printStackTrace();
38         }
39     }
40
41     @Override
42     public void onRequestPermissionsResult(int requestCode, String[] permissions,
43                                            int[] grantResults) {
44         switch (requestCode) {
45             case 1:
46                 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
47                     call();
48                 } else {
49                     Toast.makeText(this, "you denied the permission", Toast.LENGTH_LONG).show();
50                 }
51                 break;
52             default:
53         }
54     }
55 }

转载于:https://www.cnblogs.com/Mask-D/p/9520291.html

Android内容提供器——运行权限相关推荐

  1. android内容提供器读取图片,android实现拍照或从相册选取图片

    从相册或拍照更换图片功能的实现:(取图无裁剪功能) 获取图片方式: (类似更换头像的效果) 1.手机拍照 选择图片: 2.相册选取图片: 本文只是简单实现该功能,页面展示有些简陋,运行效果图如下: 创 ...

  2. Android 内容提供器---简介

    内容提供器管理结构化的数据集的访问.它们封装数据.提供定义数据安全的机制.内容提供器是用运行在另一个进程中的代码连接另一个进程中的数据的标准接口. 当你想要访问内容提供器中的数据时,使用应用程序的Co ...

  3. Android 内容提供器---内容提供器基础(内容的统一资源标识(URIs))

    内容URI是在提供器中标识数据统一资源标识.内容的统一资源标识包括完整的提供器的符号名和所指向的一个表名.当你调用一个客户端方法来访问提供器中的一个表时,这个表的内容的统一资源标识就应该是参数之一. ...

  4. Android内容提供器的应用,基于Android的智能终端应用防护系统短信过滤子模块的设计与实现...

    摘要: 智能终端随着3G业务的推广而普及,在各种平台的竞争中,Android逐渐占据了主流,谷歌学习苹果的应用商店模式,推出了自己的应用商城.面对应用市场的繁荣,用户的终端安装了形形色色的应用,许多安 ...

  5. Android入门(13)| Android权限 与 内容提供器

    文章目录 普通权限与危险权限 运行时申请权限 内容提供器 运用安卓封装好的内容提供器 自实现的内容提供器 概念 实现 普通权限与危险权限 主要用于不同应用程序之间在保证被访数据的安全性的基础上,实现数 ...

  6. android 提供的方法,Android编程之创建自己的内容提供器实现方法

    本文实例讲述了Android编程之创建自己的内容提供器实现方法.分享给大家供大家参考,具体如下: 我们学习了如何在自己的程序中访问其他应用程序的数据.总体来说思 路还是非常简单的,只需要获取到该应用程 ...

  7. 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider)

    [索引页] [×××] 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider) 作者:webabcd 介绍 在 Android 中使用 SQLit ...

  8. 内容提供器(Content-Provider)完整使用指南

    [TOC] 1. 什么是内容提供器? ​ 内容提供器(Content Provider) 主要用于在不同的应用程序之间实现数据的共享功能,他提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同 ...

  9. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

最新文章

  1. iOS 发布APP关于IDFA的相关内容
  2. 基于corosync+pacemaker实现主从高可用集群
  3. java中获取时间的方式,持续更新
  4. Ex 5_33 实现一个关于公式长度(其中所有文字总的出现次数)为线性时间的Horn公式可满足性问题_第十次作业...
  5. 2013-10-31 《October 31st, 2013》
  6. C语音和易语言实现内存补丁
  7. 中国移动将向广大开发者开放了SDK/API等开发工具
  8. TeamToy - 创新团队的效率工具 一个好用的 团队协作软件
  9. HttpStatusCode
  10. 汽车软件开发的8种颠覆性趋势及国产自主可控的多领域全数字实时仿真平台SkyEye
  11. emacs操作方法总结
  12. excel单元格格式设置
  13. java设计模式的六大原则
  14. 【Vue】从零搭建一个Vue项目
  15. JS 获取操作删除节点
  16. 小悦文件保险箱 - 一款保存私密文件的工具
  17. 双11之战:被激化的酒类电商出击,看1919新打法
  18. 工程师为什么不转销售
  19. mysql中日期相减_非凡教育教你excel怎么计算两个日期天数差和时间差
  20. 好程序员分享MySQL之SQL入门(一)

热门文章

  1. wp insert post 插入文章到数据库
  2. Linux ARM交叉编译工具链制作过程
  3. Ubuntu出现没有正确安装GNOME电源管理器的默认配置
  4. Dos下删除(非)空目录或文件
  5. .Net开发人员应该下载的十种必备工具(三)
  6. 前端学习(2934):上午回顾
  7. [html]HTML5如何隐藏video元素的控制栏、全屏按钮?
  8. [vue] prop验证的type类型有哪几种?
  9. [css] 举例说明shape-outside的属性的用途有哪些?
  10. 工作44:阅读代码1 dictionary