Android现在将所有的权限分为了两类,一类是普通权限,一类是危险权限。
普通权限:指那些不会直接威胁到用户的安全和隐私的权限,对于这一部分权限申请,系统会自动帮我们授权。
危险权限:表示那些可能会触及用户隐私,或者对设备安全性造成影响的权限,如获取设备联系人信息,定位设置的地理位置等,对于这部分权值,必须由用户手动点击授权才可以使用相应功能。
Android系统中完整的权限列表:http://developer.android.com./reference/android/Manifest.permission.html
在本例中申请的是拨打电话的权限
- 在activity_main.xml中定义一个按钮,该按钮的响应事件为拨打电话
2.在AndroidManifest.xml中申请拨打电话的权限
3.在MainActivity中编写点击按钮时的响应
(1)判断用户是否给我们授权
借助ContactCompat.checkSelfPermission()方法,该方法接收两个参数,第一个是 Context,第二个是具体的权限名,比如打电话的权限名就是Manifest.permission.CALL_PHONE。然后用该方法的返回值与PackageManager.PERMISSION_GRANTED进行比较,相等则说明已经授权。
如果已经授权则直接执行拨打电话的逻辑操作。如果没有授权就需要调用ActivityCompate.requestPermissions()方法来向用户申请授权,该方法需要传入三个参数,第一个参数是Activity的实例,第二个参数是一个String数组,我们把要申请的权限名放在数组中即可,第三个参数是请求码,唯一值即可,例1。
(2)重写onRequestPermissionsResult()方法
调用完requestPremissions()方法之后,系统会弹出一个权限申请的对话框,以供用户选择,不论是哪种结果,最终都会回调onRequestPermissionsResult()方法,而授权的结果则封装在grantResult参数中。
(3)拨打电话的具体操作—call()
我们构建了一个隐式的Intent,Intent的action指定为Intent.ACTION_CALL,这是系统内置的一个打电话动作。为了防止程序崩溃,我们将所有操作放在了异常捕获代码块中。