说明
从Android6.0以上,引入运行时权限这个功能,更好地保护了用户的安全和隐私.
分类
普通权限 | 不威胁用户的安全和隐私,系统会帮我们进行授权 |
危险权限 | 必须用户点击授权才行 |
代码(最简单的版本)
这样写虽然简单,但是你是不知道用户究竟是同意了还是没同意你申请的权限
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
}
}
}
代码(正常的版本)
重写onRequestPermissionsResult()方法
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
}
break;
default:
break;
}
}
}
列出所有的危险权限(9组)
CALENDAR(日历) | READ_CALENDAR |
READ_CALENDAR |
CONTACTS(联系人) | READ_CONTACTS |
WRITE_CONTACTS |
GET_CONTACTS |
LOCATION(位置) | ACCESS_FINE_LOCATION |
ACCESS_COARSE_LOCATION |
MICROPHONE(麦克风) | RECORD_AUDIO |
PHONE(电话) | READ_PHONE_STATE |
CALL_PHONE |
READ_CALL_LOG |
WRITE_CALL_LOG |
ADD_VOICEMAIL |
USE_SIP |
PROCESS_OUTGOING_CALLS |
SMS(短信) | RECEIVE_MMS |
SEND_SMS |
RECEIVE_SMS |
READ_SMS |
RECEIVE_WAP_PUSH |
STORAGE(存储) | READ_EXTERNAL_STORAGE |
WRITE_EXTERNAL_STORAGE |