我运行这个应用时,在运行时并没有要求权限,但点击返回按钮后,弹出消息要求权限。我无法找出错误的地方。
public void onClickSignUp(View view){
String permission = Manifest.permission.RECEIVE_SMS;
int grant = ContextCompat.checkSelfPermission(this, permission);
Intent intent = new Intent(FirstTimeUserPage.this,SignUpActivity.class);
if ( grant != PackageManager.PERMISSION_GRANTED) {
String[] permission_list = new String[1];
permission_list[0] = permission;
ActivityCompat.requestPermissions(this, permission_list, 1);
}
startActivity(intent);
}
首先要注意在manifest中声明这些权限,如果不行的话,可以使用easy permission库,这样就可以轻松地请求权限了。
简单的权限实现。
implementation 'pub.devrel:easypermissions:3.0.0'
在你实现这个库之后,在运行时在你的MainActivity中使用这个代码。
String[] perms = {Manifest.permission.RECEIVE_SMS};
if (!EasyPermissions.hasPermissions(this, perms)) {
EasyPermissions.requestPermissions(this, "We need this permission",
123, perms);
}
为了处理权限是否被授予的问题,在你的活动中使用下面的代码来实现。
public class MenuActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks
在你实现了上面的代码之后,你可以用你的方式来处理这种情况。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}