我想请求SEND_SMS
和READ_SMS
运行时权限(如果未提供)。这是我的代码:
int PERMISSION_ALL = 1;
String[] PERMISSIONS = {
Manifest.permission.SEND_SMS,
Manifest.permission.READ_SMS
};
@Override
protected void onCreate(Bundle savedInstanceState) {
if (!hasPermissions(this, PERMISSIONS)) {
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
}
public static boolean hasPermissions(Context context, String... permissions) {
if (context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == PERMISSION_ALL){
if (grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
new AlertDialog.Builder(this)
.setTitle("Permission Needed")
.setMessage("Please press OK to allow the permissions")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(candidate_registration.this, PERMISSIONS, PERMISSION_ALL);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
}
}
}
我连续拒绝两次后,无论我按多少次AlertDialog
中的OK
按钮,它都不再请求权限,只有AlertDialog
一直弹出。如何解决此问题?
1条答案
按热度按时间cetgtptt1#
你不能,这是设计好的--为了防止滥用。
你最好还是按照官方规定来。
再次请求权限的唯一方法是将用户导航到应用程序信息,用户必须手动允许它:
您还使用了一种已弃用的请求权限的方式。考虑使用
ActivityResultContracts.RequestMultiplePermissions()
: