【发布时间】:2021-10-12 06:57:16
【问题描述】:
我正在制作一个应该在单击按钮后拨打号码的应用程序。我要做的就是在第一个权限请求后立即执行操作。
//everything here is in an onClickListener
//number is already specified
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse(String.format("tel:%s", Uri.encode(number))));
if(ActivityCompat.checkSelfPermission(activity,
Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED){
activity.startActivity(callIntent);
}
else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//if Api >= 23
if(activity.shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)){
//WHY THIS PERMISSION IS NEEDED
final String why_the_permission_is_needed = "why it is needed";
new AlertDialog.Builder(activity)
.setTitle("WHY THIS PERMISSION IS NEEDED")
.setMessage(why_the_permission_is_needed)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
})
.create().show();
}
}
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CALL_PHONE}, DIAL_PERMISSION_REQUEST_CODE);
if(ActivityCompat.checkSelfPermission(activity,
Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED){
activity.startActivity(callIntent);
}
}
之前发生的事情
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CALL_PHONE}, DIAL_PERMISSION_REQUEST_CODE);
完成剩下的代码
if(ActivityCompat.checkSelfPermission(activity,
Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED){
activity.startActivity(callIntent);
}
会被处决。这意味着用户必须单击一次按钮才能获得权限,然后再次单击才能实际执行意图,这是我不想要的。
还有
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CALL_PHONE}, DIAL_PERMISSION_REQUEST_CODE);
返回无效。
【问题讨论】:
标签: java android android-studio android-intent android-permissions