android - 单击按钮时未弹出权限框-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);
}
解决方案
首先要小心,你在清单中也声明了这些权限。如果它不起作用。你可以使用简单的权限库,使请求权限变得容易。
简单的权限实现:
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();
}
}
推荐阅读
- c# - 如何为 C# Visualstudio 选择构建应用程序的框架版本
- firebase - firebase 函数失败并出现错误 gserviceaccount.com:signBlob failed, reason: Client network socket disc
- python - 如何使它成为列表理解?
- google-sheets - 谷歌表格查询 - 使用参考单元格更改查询数据范围
- javascript - Vue.js 使用 import { } 时找不到导出错误
- python - 如何为从 Altair 提取的 rSquared 添加前缀?
- python - 高精度回归方法
- java - imageView 的随机 XML 动画
- angular - Angular 10 HttpClient 无法添加正文和标题
- javascript - 为什么我的 foreach addEventListener 没有添加事件?