- ContextCompact.checkSelfPermission 检查是否已有某个权限
- ActivityCompat.requestPermissions() 权限请求
- onRequestPermissionResult() 权限请求后的回调
- ActivityCompat.shouldShowRequestPermissionRationale 可以给用户展示的一个权限请求来的作用,在权限被用户拒绝的情况才会出现
危险权限:
- CALENDAR
- CAMERA
- CONTACTS
- LOCATION
- MICROPHONE
- PHONE
- SENSORS
- SMS
- STORAGE
详情:

详情
简单的权限请求demo
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.bn_main).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
callPhone();//模拟打电话
}
});
}
private void callPhone(){
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
//权限请求未被同意
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},1);
}else {
//权限请求被同意
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1://请求的权限码
if (grantResults[0]==PackageManager.PERMISSION_GRANTED){
//权限被同意
}else {
//权限被拒绝 提示用戶沒有權限
}
break;
}
}
}
封装:
/**
* 檢查是否由權限
* */
private Boolean hasPermission(String ... permissions){
for(String permission:permissions){
if (ContextCompat.checkSelfPermission(this,permission)!= PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
/**
* 權限請求
* */
private void requestPermissions(int code,String ... permissions){
ActivityCompat.requestPermissions(this,permissions,code);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case Constants.CALL_CODE:
break;
}
}
网友评论