您当前的位置: 首页 >  android

梁同学与Android

暂无认证

  • 3浏览

    0关注

    618博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android --- 动态获取定位权限时: Fragment 中 onRequestPermissionsResult 方法不执行

梁同学与Android 发布时间:2021-06-22 21:19:49 ,浏览量:3

今天我在写百度地图 API 定位功能的时候遇到了这样一个问题,需要在打开 APP 首页的时候动态获取定位权限,然后我的代码是这样写的(在 Fragment 中)


 @Nullable
    public View onCreateView(@NonNull LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.fragment_home,container,false);
        Request();
        return view;

    }
	void Request() { // 动态获取权限方法
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(getContext(),Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 200); // 200 是回调识别码
            }else {
                //开始定位
                initLocation();
            }
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 200: // 刚才的识别码
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ // 用户同意权限,执行我们的操作
                    initLocation(); // 开始定位
                }else{ // 用户拒绝之后,当然我们也可以弹出一个窗口,直接跳转到系统设置页面
                    Toast.makeText(getActivity(),"未开启定位权限,请手动到设置去开启权限",Toast.LENGTH_LONG).show();
                }
                break;
            default:break;
        }
    }

然而 onRequestPermissionsResult 方法并没有回调,没有回调的话,我就不能执行定位方法,原因是

在Fragment中我们不能通过ActivityCompat.requestPermissions去请求,因为这样请求Fragment不能收到onRequestPermissionsResult。所以我们应该直接用XXXFragment.this.requestPermissions去请求权限

如果你写了 ActivityCompat.requestPermissions 那么你的回调方法就要写到 Activity 中,我自己不信,就把 onRequestPermissionsResult 放到了 fragment 的父 Activity 中,果然,在 Activity 中回调了。

多谢博主指点:https://blog.csdn.net/z302766296/article/details/73549807

关注
打赏
1660730345
查看更多评论
立即登录/注册

微信扫码登录

0.1368s