Android基础之权限
一、分类
- 普通权限
指不会直接威胁到用户安全和隐私的权限,对于这部分权限申请,系统自动帮我们进行授权,如网络状态查看权限 - 危险权限
表示那些可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人,定位设备的地理位置等。这部分权限必须手动授权
二、危险权限表
除了危险权限以外,剩余的都是普通权限
属于这张表达的权限,就需要运行时权限处理
不在这张表的中,只需要在Manifest.xml中声明一下权限即可
每个权限属于一个权限组,只要其中一个被同意了,整个都会被同意
三、实例(打电话)
MainActivity.java
package com.example.runtimepermissiontest;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button makeCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
makeCall=(Button)findViewById(R.id.make_call);
makeCall.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//通过ContextCompat.checkSelfPermission()函数判断是否授权
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();
}
}
});
}
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
//requestPermissions的结果会回调到下面的函数中,其中第三个参数就是授权结果
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){
switch (requestCode){
case 1://“1”就是刚才的请求码
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
call();
}
else{//不同意授权的情况
Toast.makeText(this,"你拒绝了这个授权",Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
}
在AndroidManifest.xml中注册
<uses-permission android:name="android.permission.CALL_PHONE"/>
结果: