首页 > 解决方案 > 单击按钮时未弹出权限框-Android Studio

问题描述

当我运行应用程序时,在运行时它不会请求权限,但在单击后退按钮后,弹出消息会出现权限。我无法找出错误。

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);
}

标签: androidandroid-studio-3.0

解决方案


首先要小心,你在清单中也声明了这些权限。如果它不起作用。你可以使用简单的权限库,使请求权限变得容易。

简单的权限实现:

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

在您实现前 3 种方法的代码后,您可以按照自己的方式处理这种情况。

@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();
    }
}

推荐阅读