onRequestPermissionsResult 在片段中不起作用

Posted

技术标签:

【中文标题】onRequestPermissionsResult 在片段中不起作用【英文标题】:onRequestPermissionsResult not working in fragment 【发布时间】:2017-10-15 10:15:31 【问题描述】:

我正在尝试实现 Marshmallow 的权限支持,但我在“onRequestPermissionsResult”中的代码从未被调用。

在 Activity 中工作时,它在工作,但在片段中我遇到了问题,即控件没有进入 onRequestPermissionsResult()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
                            mCheckPermission();
                        

在 mCheckPermission() 中:-

public void mCheckPermission() 
        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(),
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
            requestPermissions(new String[]Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,
                    PERMISSION_REQUEST_COARSE_LOCATION );

        
    

对话框弹出两个按钮。拒绝和允许。 当点击按钮时,控件没有进入 onRequestPermissionCheck();

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

        switch (requestCode)
            case PERMISSION_REQUEST_COARSE_LOCATION: 
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) 

                    Toast.makeText(getActivity(), "permission granted", Toast.LENGTH_LONG).show();
                    //call your action

                 else 
                    Toast.makeText(getActivity(), "permission denied", Toast.LENGTH_LONG).show();
                
                break;
            
        
    

【问题讨论】:

参考***.com/questions/35989288/… 我已经调用了 requestpermissions() 而我没有调用 ActivityCompat.requestpermission(); 1.如果您覆盖了活动的onRequestPermissionsResult,则将其称为super.onRequestPermissionsResult。 2.尝试去掉fragment的super.onRequestPermissionsResult(requestCode, permissions, grantResults);或者直接放到函数末尾。 【参考方案1】:

您需要使用support.v4.app.fragment requestPermission,而不是使用requestPermission的活动版本。

Fragment Request Permission

改变

 ActivityCompat.requestPermissions(this, new String[]android.Manifest.permission.READ_CONTACTS, REQUEST_CONTACT);

requestPermissions(new String[] android.Manifest.permission.READ_CONTACTS, REQUEST_CONTACT);

onRequestPermissionsResult 将被正确调用。

Credits

【讨论】:

以上是关于onRequestPermissionsResult 在片段中不起作用的主要内容,如果未能解决你的问题,请参考以下文章