Android在程序运行中申请权限
2018-12-02 15:51
99 查看
在程序运行过程中申请权限
这里用CALL_PHONE作为实例,参考《第一行代码》第二版。
1、首先设置了一个按钮
<Button android:id="@+id/make_call" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Make Call"/>
2、在AndroidManifest.xml文件中声明如下权限:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.runtimepermissiontest"> //只添加这一行就可以 <uses-permission android:name="android.permission.CALL_PHONE" /> <application ... </application> </manifest>
如果是Android 6.0之前的版本,现在只需要在按钮中添加打电话逻辑就可以了,但在6.0之后的版本中,CALL_PHONE被列为了危险权限。所以需要申明权限。
3、编写按钮的代码
@Override public void onClick(View v) { 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(); } }
call()方法如下:
private void call(){ try{ //Intent.ACTION_CALL可以直接拨打电话 Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:10086")); startActivity(intent); }catch(SecurityException e){ e.printStackTrace(); } }
onRequestPermissionsResult方法:
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] 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: } }
- 判断用户是否给我们授权,借助ContextCompat.checkSeifPermission()方法,接受两个参数(第一个上下文Context,第二个权限名)
- 把方法的返回值和PackageManager.PERMISSION_GRANTED作比较,相等就说明用户已经授权,不等说明用户没有授权。
- 如果已授权,直接执行拨打电话的逻辑
- 如果没有授权,则需要调用ActivityCompat.requestPermissions()方法来向用户申请授权
- requestPermissions()方法接受3个参数,第一个参数是活动实例,第二个参数是String数组(用来放权限名),第三个参数是请求码,只需要唯一就了
- 然后系统会弹出一个权限申请的对话框,然后用户可以选择同意或者拒绝,不管哪种结果都会回调到OnRequestPermissionsResult()方法中,授权结果会封装到grantResults参数中
- 判断一下授权结果,如果同意调用call()方法拨打电话,拒绝就放弃操作,弹出失败提示
相关文章推荐
- Android 在程序运行时申请权限的实例讲解
- Android程序运行权限申请
- android运行时权限解决办法(含有申请权限已授权、权限被拒绝、权限勾选不在提示的回调)
- Android开发之运行时权限申请和自定义权限
- Android 6.0 运行时权限申请
- Android RuntimePermissions运行时权限:批量权限申请
- Android 6.0运行时权限解析与申请
- Android 程序申请权限小知识点
- android6.0程序在运行时申请权限
- [Android 6.0] 程序开发(一)--运行时请求权限
- Android程序运行时权限与文件系统权限的区别
- 程序运行时申请权限
- android 6.0运行时权限的申请(微信在android 6.0上实现运行时请求权限的实现)
- Android程序运行时权限与文件系统权限的区别
- android运行时权限解决办法(含有申请权限已授权、权限被拒绝、权限勾选不在提示的回调)
- 【Android运行时权限申请快速学习教程】
- 程序运行时申请权限
- VS编写的程序申请以管理员权限运行
- 在Windows 7 下使用Visual Studio 2010 编写自动申请管理员权限运行的程序
- 安卓四大组件-内容提供器-1_程序运行时申请权限