Android中所有的危险权限,一共有9组24个权限。使用这些权限时,必须要进行申请。在android6.0以前可以直接修改AndroidManifest.xml文件,在其中静态生命权限。但是android6.0以后,为保障用户的安全和隐私,android要求开发者动态申请权限。下面给出危险权限表,用作以后参考:
下面开始展示如何进行动态权限申请,以获得打电话权限为例:
第一步,在AndroidManifest.xml中写入如下代码:
其中android:name属性的值是“android.permission.权限名称”,想要申请其他权限模仿这个格式再写一行<uses-permission>即可,注意如果这个权限被用户授权了,那么这个权限名所属的权限组的所有权限也会同时被授权。
第二步,在自己创建的权限申请activity中写入如下代码:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button makeCall = (Button) findViewById(R.id.make_call);makeCall.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//检测用户是否已经给我们授权了。//ContextCompat.checkSelfPermission()方法共两个参数,第一个参数是Context,第二个参数是权限名。若返回值等于PackageManager.PERMISSION_GRANTED,则已经授权,否则还未授权if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {//进行权限申请//ActivityCompat.requestPermissions()方法共三个参数,第一个参数是Activity实例,第二个是存放权限名的数组,第三个参数是请求码,唯一值即可ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.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();}}//申请权限之后,系统会回调到onRequestPermissionsResult()方法,授权结果会存放到grantResults数组里//共三个参数,第一个参数为请求吗,第二个参数为存放权限名的数组,第三个参数为相对应的每个权限的授权结果@Overridepublic 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:}}
}