gpt4 book ai didi

android - 无法拦截用户拒绝 Marshmallow 中的权限

转载 作者:行者123 更新时间:2023-11-29 00:06:04 27 4
gpt4 key购买 nike

我当前的应用程序有一个 FeedbackFragment,它使用支持库中的 Fragment 并提供一个复选框以允许用户有选择地发送系统日志及其反馈。因为将日志附加到外发电子邮件需要访问外部存储(WRITE_EXTERNAL_STORAGE 权限),所以我必须在请求 FeedbackFragment 时请求权限。如果用户拒绝写入外部存储的权限,我想禁用/隐藏“包括系统日志”复选框,但我希望此屏幕的其余功能正常工作(顺便说一句,这在 Marshmallow 之前的设备上工作正常) .为此我根据Android官方文档写了相应的方法,再加上很多SO文章的结合,这就是我目前所拥有的。请注意,我不会在此代码的“拒绝”分支中的任何断点处停止。

下面的所有逻辑都是在 onCreateView() 调用 checkExternalStoragePermissions() 时创建的

我错过了什么?

private void checkExternalStoragePermissions() {
if (ContextCompat.checkSelfPermission(getContext(), WRITE_EXTERNAL_STORAGE) == PERMISSION_GRANTED) {
canSendAttachments = true;
systemLogsCheckbox.setEnabled(true);
} else {
requestExternalStoragePermission();
}

}

private void requestExternalStoragePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), WRITE_EXTERNAL_STORAGE)) {

new SnackBar.Builder(getActivity())
.withMessage(getString(R.string.write_external_storage_permission_rationale))
.withDuration(SnackBar.PERMANENT_SNACK)
.withActionMessage("OK")
.withOnClickListener(new SnackBar.OnMessageClickListener() {
@Override
public void onMessageClick(Parcelable token) {
ActivityCompat.requestPermissions(getActivity(),
new String[]{WRITE_EXTERNAL_STORAGE},
WRITE_TO_EXTERNAL_STORAGE_PERMISSION);
}
})
.withTextColorId(R.color.almanac_red_tab_highlight)
.show();

} else {

ActivityCompat.requestPermissions(getActivity(),
new String[]{WRITE_EXTERNAL_STORAGE}, WRITE_TO_EXTERNAL_STORAGE_PERMISSION);
}

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
@NonNull int[] grantResults) {
if (requestCode == WRITE_TO_EXTERNAL_STORAGE_PERMISSION) {
if ((grantResults.length == 1) && (grantResults[0] == PERMISSION_GRANTED)) {

canSendAttachments = true;
systemLogsCheckbox.setEnabled(true);
} else {
canSendAttachments = false;
systemLogsCheckbox.setEnabled(false);
systemLogsCheckbox.setChecked(false);
}
} else
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

最佳答案

如果您从Fragment 调用,您应该调用FragmentCompat.requestPermissions因此回调会路由您的 fragment 而不是您的 Activity 。

您可能需要将此添加到您的 gradle 文件中,因为 FragmentCompat 在 support-v13 库中。

compile 'com.android.support:support-v13:23.1.1'

关于android - 无法拦截用户拒绝 Marshmallow 中的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723939/

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