gpt4 book ai didi

android - Marshmallow 的运行时权限

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:08:04 28 4
gpt4 key购买 nike

RUN-TIME Permission

这样一个新的很棒的安全功能

我试图理解它并为此制作一个演示但是我想到了一个问题,即当我使用 DIALOG 处理用户权限时。

如何处理“不再询问

enter image description here

假设我的应用程序必须需要位置/联系人,但用户使用“不再询问”拒绝它。

我能为此做些什么。并非所有用户都了解我的领域是必需的。

有什么建议吗?

最佳答案

首先你需要在你的Activity中实现OnRequestPermissionsResultCallbackListener类的ActivityCompat并覆盖void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 检查用户是否允许或拒绝权限的方法

你可以这样做。我在这里检查 WRITE_EXTERNAL_STORAGE 的访问权限:

int REQUEST_STORAGE = 1;

private void checkPermissions() {
if (hasStoragePermissionGranted()) {
// you can do whatever you want
} else {
requestPermission();
}
}

public boolean hasPermissionGranted(){
return ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}

public void requestPermission() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
ActivityCompat.requestPermissions(MainActivity.this, {Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_STORAGE);
}
}

这里是 onRequestPermissionsResult() 方法,当用户允许或拒绝运行时权限对话框中的权限时将被调用。

您还可以处理当用户选中从不显示运行时权限对话框时的情况,您可以显示 Snackbar 或按钮将用户重定向到您的应用程序设置页面,因为在用户选中 “从不询问”后您无法显示权限对话框再次”

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {

if (requestCode == REQUEST_STORAGE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Storage permission is enabled
canSendAttachments = true;
systemLogsCheckbox.setEnabled(true);
} else if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivtity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//User has deny from permission dialog
Snackbar.make(mainLayout, getResources().getString("Please enable storage permission"),
Snackbar.LENGTH_INDEFINITE)
.setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions(MainActivity.this, {Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_STORAGE);
}
})
.show();
} else {
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
Snackbar.make(mainLayout, getResources().getString("Please enable permission from settings"),
Snackbar.LENGTH_INDEFINITE)
.setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", MainActivity.this.getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
})
.show();
}
}
}

在这里,我使用了 Snackbar 向用户显示有关权限的相关消息,mainLayoutActivity 的主布局 的 ID。

希望对你有帮助。

关于android - Marshmallow 的运行时权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34717383/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com