我为食物交付做了一个应用程序。在我的应用程序中,当用户使用Android手机版本的marshmallow时,我的应用程序不会在第一时间询问读取短信的许可。但是当用户下次打开应用程序时,我的应用程序会要求获得许可。我不知道是什么问题。我希望当用户第一次打开应用程序时,应该询问。而不是第二次。
这是我在我的onCreate()
方法活动中询问我正在调用此方法的权限的方法:
private void permissionForMarshMallow() {
int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this,
Manifest.permission.READ_SMS);
if (ContextCompat.checkSelfPermission(LoginActivity.this,
Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(LoginActivity.this,
Manifest.permission.READ_SMS)) {
Log.e("permission...granted", "permission granted............");
} else {
ActivityCompat.requestPermissions(LoginActivity.this,
new String[]{Manifest.permission.READ_SMS},
REQUEST_CODE_ASK_SINGLE_PERMISSION);
}
}
}
这是覆盖方法onRequestPermissionsResult()
:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_SINGLE_PERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
// Toast.makeText(LoginActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
任何人都可以告诉我如何在第一次第二次申请许可的应用程序?
答案 0 :(得分:2)
您的代码存在逻辑缺陷。这就是你的代码的运行方式:
所以基本上,你不应该请求许可。在您应该请求许可的情况下,您只需记录“允许的权限”,而不是要求权限。 您只需稍微更改一下代码:
private void permissionForMarshmallow() {
int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS);
if (ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.READ_SMS}, REQUEST_CODE_ASK_SINGLE_PERMISSION);
}
else {
// user probably checked "never ask again" - we should not ask for permission.
}
}
}
答案 1 :(得分:0)
看起来首先启动shouldShowRequestPermissionRationale为true,您只需创建一个日志条目。您在日志中写了它,但在这种情况下,尚未授予权限。