-
普通权限:在AndroidManifest.xml文件中声明后,系统自动授权
-
危险权限:运行时申请,需要用户手动勾选。共9组24个权限
- 判断用户是否已经授权:ContextCompat.checkSelfPermission()方法
- 参数1:context
- 参数2:具体的权限名。如点电话:Manifest.permission.CALL_PHONE
- 返回值:PackageManager.PERMISSION_GRANTED:已授权
- 已授权则直接调用相应的方法,未授权则调用ActivityCompat.requestPermissions方法来向用户申请授权
- 参数1:Activity示例
- 参数2:要申请的权限名,String数组
- 参数3:请求码,要求唯一即可。
- 回调到onRequestPermissionsResult方法中,授权结果封装在grantResults参数中
public class MainActivity extends AppCompatActivity { //......省略了一些基础的设置代码 makeCall.setOnClickListener(new View.OnClickListener() { @override public void onClick(View v) { if (ContextCompat.chekSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permissiong.CALL_PHONE},1); } else { call(); } } }); } //定义拨打号码的方法 private void call() { try { Intent intent=new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:10086")); startActivity(intent); } catch (SecurityException e) { e.printStackTrace(); } } //定义用户权限勾选结果的处理 @override public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) { switch (requestCode) { case 1: if (grantedRequests.length>0 && grantedRequests[0]==PackageManager.PERMISSION_GRANTED) { call(); } else { Toast.makeText(this,"you denied the permission",Toast.LENGTH_SHORT).show(); } break; default; } }
- 判断用户是否已经授权:ContextCompat.checkSelfPermission()方法