android的内容提供器和权限,Android内容提供器——运行权限

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

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

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

1 group:android.permission-group.CONTACTS2 permission:android.permission.WRITE_CONTACTS3 permission:android.permission.GET_ACCOUNTS4 permission:android.permission.READ_CONTACTS5

6 group:android.permission-group.PHONE7 permission:android.permission.READ_CALL_LOG8 permission:android.permission.READ_PHONE_STATE9 permission:android.permission.CALL_PHONE10 permission:android.permission.WRITE_CALL_LOG11 permission:android.permission.USE_SIP12 permission:android.permission.PROCESS_OUTGOING_CALLS13 permission:com.android.voicemail.permission.ADD_VOICEMAIL14

15 group:android.permission-group.CALENDAR16 permission:android.permission.READ_CALENDAR17 permission:android.permission.WRITE_CALENDAR18

19 group:android.permission-group.CAMERA20 permission:android.permission.CAMERA21

22 group:android.permission-group.SENSORS23 permission:android.permission.BODY_SENSORS24

25 group:android.permission-group.LOCATION26 permission:android.permission.ACCESS_FINE_LOCATION27 permission:android.permission.ACCESS_COARSE_LOCATION28

29 group:android.permission-group.STORAGE30 permission:android.permission.READ_EXTERNAL_STORAGE31 permission:android.permission.WRITE_EXTERNAL_STORAGE32

33 group:android.permission-group.MICROPHONE34 permission:android.permission.RECORD_AUDIO35

36 group:android.permission-group.SMS37 permission:android.permission.READ_SMS38 permission:android.permission.RECEIVE_WAP_PUSH39 permission:android.permission.RECEIVE_MMS40 permission:android.permission.RECEIVE_SMS41 permission:android.permission.SEND_SMS42 permission:android.permission.READ_CELL_BROADCASTS

申请权限:

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

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

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

申请主要分三个部分:

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

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

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

代码如下:

1 public classMainActivity extends AppCompatActivity {2

3 @Override4 protected voidonCreate(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(newView.OnClickListener() {13 @Override14 public voidonClick(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 voidcall() {32 try{33 Intent intent = newIntent(Intent.ACTION_CALL);34 intent.setData(Uri.parse("tel:10086"));35 startActivity(intent);36 } catch(SecurityException e) {37 e.printStackTrace();38 }39 }40

41 @Override42 public void onRequestPermissionsResult(intrequestCode, 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值