android权限申请

发布时间 2023-03-22 21:08:49作者: 安妍

权限申请

  1. android 6.0之前申请权限:以PHONE_CALL 为例

manifest添加如下内容:
<uses-permission android:name="android.permission.CALL_PHONE" />
public class PTest extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_ptest);
}

public void makeCall(View view) {
   Intent intent = new Intent(Intent.ACTION_CALL);
   intent.setData(Uri.parse("tel:10086"));
   startActivity(intent);
}
}
  1. android 6.0之后

使用如上方法申请权限,报错信息如下,权限未申请成功

正确方法:

manifest添加如下内容:
<uses-permission android:name="android.permission.CALL_PHONE" />
public class PTest extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_ptest);
  }

   public void makeCall(View view) {
       //未申请权限-->调用ActivityCompat.requestPermissions申请权限
      if (ContextCompat.checkSelfPermission(PTest.this,           Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
           ActivityCompat.requestPermissions(PTest.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
      }else {
           call();
      }
  }
     void call(){
       //call
       Intent intent = new Intent(Intent.ACTION_CALL);
       intent.setData(Uri.parse("tel:10086"));
       startActivity(intent);
  }
   //权限申请执行结果
   @Override
   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       super.onRequestPermissionsResult(requestCode, permissions, 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:
      }
  }
}