gpt4 book ai didi

Android M 权限对话未出现在 fragment 中

转载 作者:行者123 更新时间:2023-11-30 01:25:37 24 4
gpt4 key购买 nike

我正在尝试为 android M 请求 READ_PHONE_STATE 权限,但它在 Activity 中有效,当我在 fragment 中实现它时,它不显示对话框。这是代码。

if (preference.getToken() == null) {
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
requestReadPhoneStatePermission();
} else {
TelephonyManager tm = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
HashMap<String, String> params = new HashMap<String, String>();
params.put("appCode", Constants.TRACKING_ID);
params.put("phone", tm.getDeviceId());
DeviceUserService.getDeviceUser(params, getContext());
bookmark();
}

这是方法 requestReadPhoneStatePermission

public void requestReadPhoneStatePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_PHONE_STATE)) {

} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_PHONE_STATE}, READ_PHONE_STATE);
}
}

这是关于 onRequestPermissionsResult 的代码。

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case READ_PHONE_STATE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "granted", Toast.LENGTH_LONG).show();

} else {
Toast.makeText(getContext(), "permission not granted", Toast.LENGTH_LONG).show();
}
return;
}
}

我错过了什么?提前致谢。

最佳答案

您的 requestReadPhoneStatePermission 方法有误。

编辑

我看到这篇旧帖子得到了支持,并意识到这不是一个正确的实现。

这是处理权限请求的正确方法。

public void requestReadPhoneStatePermission() {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_PHONE_STATE}, READ_PHONE_STATE);
}



@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==READ_PHONE_STATE){
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
//do your thing
}
else{
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_PHONE_STATE)){
//user denied the permission but did not check the "never show again" option.
//You can ask for the permission again or show a dialog explaining
//why you need the permission with a button that requests the permission again on click.
}
else{
//user denied the permission and checked the "never show again" option.
//Here you can show a dialog explaining the situation and that the user has
//to go to the app settings and allow the permission otherwise yor feature
//will not be available.
}
}
}

}

关于Android M 权限对话未出现在 fragment 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465148/

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