Android内容提供器——运行权限

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

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

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

 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] CSS content属性特殊字符有哪些?

[css] CSS content属性特殊字符有哪些&#xff1f; 今天在做开发的时候&#xff0c;需要用到CSS的content属性&#xff0c;加入一些特殊字符来实现网页效果。但是特殊字符那么多&#xff0c;怎么可能记得住&#xff0c;所以谷歌百度搜索之后找到了一个比较全的&#xff0c;在这…

json-server的使用

这里跳过node安装以及npm安装 先全局安装&#xff1a;npm install json-server -g在桌面创建一个空的文件夹JSONSERVERcd 进入到这个文件夹执行npm init --yes&#xff0c;这时候文件夹会多出一个package.json的文件项目再安装一次&#xff1a;npm install json-server --sav…

Eclipse 使用 CodeMix 插件 开发 Vue.js

前言&#xff1a;对比vscode&#xff0c; codemix集成在eclipse插件里面&#xff0c;符合使用习惯 1、下载并安装node.js 官网地址&#xff1a; https://nodejs.org/en/ &#xff0c; 当前版本是 node-v8.11.4-x64.msi&#xff0c; 安装过程直接默认选项即可。 安装完成后&…

用css画出一个圆圈,里面有个叉号(不能用英文字母x)

用css画出一个圆圈&#xff0c;里面有个叉号&#xff08;不能用英文字母x&#xff09; #cyc {width: 150px;height: 150px;margin: 100px auto;border-radius: 50%;border: 5px solid #000000;position: relative;}#cyc::before {content: "";display: block;width:…

开发模式下浏览器不支持ES6

在工程项目下安装babel: cnpm install babel-preset-stage-2 --sava-dev 然后在工程项目下找到.babelrc文件打开并在这个位置添加这个参数&#xff0c;如下图 最后&#xff0c;cnpm run dev重启一下项目即可

[css] 用css画出一个圆圈,里面有个对号

[css] 用css画出一个圆圈&#xff0c;里面有个对号 #right {width: 150px;height: 150px;margin: 100px auto;border-radius: 50%;border: 5px solid #000000;display: flex;justify-content: center;align-items: center;}#right::before {content: "";display: bl…

vue项目打包成APP

点击查看转载源 事先准备&#xff0c;开发完成的web app项目&#xff08;也可以利用vue-cli脚手架构建vue模板项目&#xff09;&#xff0c;npm run dev可以正常预览的项目 1&#xff0c;将项目目录下config文件内index.js中assetsPublicPath修改为 assetsPublicPath: ./ 2&…

[css] 如何解决html设置height:100%无效的问题?

[css] 如何解决html设置height&#xff1a;100%无效的问题&#xff1f; 在外层包一个给定高度的 div个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

二分查找与斐波那契

二分查找 l[1,2,10,30,33,99,101,200,301,311,402,403,500,900,1000] def search(n,l):if len(l) 1:print("not exit")returnindex len(l)//2if n > l[index]:l l[index1:]search(n,l)elif n < l[index]:l l[:index]search(n,l)else:print("find it&q…

vue开发小程序Demo

1-准备 电脑安装好node.js环境&#xff0c;安装好npm&#xff0c;安装好微信web开发者工具&#xff0c;选择一款你喜欢的编辑器&#xff0c;我用的是WebStorm 2-打开webStorm&#xff0c;新建一个项目空间然后在终端执行以下命令&#xff0c;我这里是Windows下的WebStorm自带…

react入门笔记

安装react —— npm install create-react-app -g 创建react APP —— npx create-react-app my-pro-name &#xff08;是npx&#xff0c;不是npm喔&#xff09; 测试项目 —— cd my-pro-name npm start

[css] 用css3实现伪3D的文字效果

[css] 用css3实现伪3D的文字效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-…

认识 react 的钩子函数

钩子函数运行总览&#xff1a; react基本的钩子函数&#xff08;蓝色为持续运行的钩子函数&#xff09; 执行顺序 和组件相关的几个重要钩子函数

[css] 用css3实现文字发光的效果

[css] 用css3实现文字发光的效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-…

host 'xx' is not allowed to connect to this MySql server

update mysql.user set host % where user root; FLUSH PRIVILEGES; select * from mysql.user;转载于:https://www.cnblogs.com/jjSmileEveryDay/p/9532036.html

[css] 你有使用过css的属性background-blend-mode吗?说说它的运用场景有哪些?

[css] 你有使用过css的属性background-blend-mode吗&#xff1f;说说它的运用场景有哪些&#xff1f; 背景的混合模式,可以是背景图片与背景图片的混合,也可以是背景图片和背景色的之间的混合.个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#x…

递归算法学习

核心&#xff1a; 所谓的递归函数就是在函数体内调用本函数。 注意问题&#xff1a; 使用递归函数一定要注意&#xff0c;处理不当就会进入死循环。递归函数只有在特定的情况下使用 &#xff0c;比如阶乘问题 //递归算法测试 10的阶乘 function f(num){if(num<1){return…

javascript与php与python的函数写法区别与联系

1、javascript函数写法种类&#xff1a; &#xff08;一&#xff09;、第一种 function test(param){return 111; } &#xff08;二&#xff09;、第二种 var test function(param){return 222; }备注&#xff1a;小程序里面是 param&#xff1a;function&#xff08;&#x…

[css] 如何使用css实现鼠标跟随?

[css] 如何使用css实现鼠标跟随&#xff1f; 铺满元素,hover box-shadow个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

小程序加载思源黑体

思源黑体 CN&#xff08;Source Han Sans CN&#xff09;下载链接 放在app.js的onLaunch方法里一次加载 const util require(utils/util.js);App({onLaunch: function () {//加载思源黑体util.getFontFamily();}, })//这个方法建议放到公共文件中&#xff0c;例如我这里是uti…