从v4.Fragment请求运行时权限并将回调转到Fragment?

RED*_*ED_ 57 java android android-fragments android-6.0-marshmallow

我有一个引起冲突的奇怪问题.我不得不切换到原Fragments生来修复它,但有一些错误.

我原来的问题:我有一个导航抽屉设置v4 Fragments.要在我的一个片段中请求许可我打电话ActivityCompat.requestPermissions(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION, 1);提示显示正常,但是当我接受或拒绝许可时,没有任何反应.onRequestPermissionsResult()永远不会调用回调.相反,它会在我的片段附加到的Activity中调用.对我来说没用,我需要回调才能在Fragment中工作.

考虑到这一点,我被告知我需要使用FragmentCompat,但这只能使用native Fragments (v13+),所以我改变了导航抽屉,使用原生Fragments而不是v4支持库Fragments.但是,因为我正在使用AppCompatActivity,所以某些东西不起作用,比如addToBackStack()回到之前的片段.

长话短说,有谁知道我怎么可以使用v4.Fragment并仍然要求获得许可Fragment并获得回调Fragment?我觉得这是Android中的一个错误,但尚未解决,但我不是100%.

让我知道如果你需要查看我的代码,它只是运行时权限所需的标准方法,我想使用v4 Fragments,虽然这不符合我的理解.

小智 67

将此添加到父活动对我有用:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if (fragments != null) {
        for (Fragment fragment : fragments) {
            fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

来源:https://code.google.com/p/android/issues/detail?id = 189121#c5


Nas*_*eek 18

这种行为似乎存在于Fragment中的v4 Fragment支持类requestPermissions中.Activity/FragmentCompat实现适用于希望使用具有11到23之间API级别的扩展功能的本机类的人员.

  • 在我的理解下使用Activity/FragmentCompat的原因是它意味着我不必检查用户是否在Android 6.0上,如果他们在旧版本的Android上,权限将默认授予权限.使用此代码,我将不得不为API 23上的那些代码添加代码,而不是,或者至少为我的语句添加不同的代码,因为Android将无法处理它.我想那时我无法使用它? (2认同)

Dor*_*ean 18

如果你需要获得permissionResult,请fragment v4确保使用

Fragment.requestPermission(String[], int);
Run Code Online (Sandbox Code Playgroud)

代替

AppCompat.requestPermission(Activity, String[], int)
Run Code Online (Sandbox Code Playgroud)

看看这个答案!


Abu*_*kar 11

您可以使用这部分代码

requestPermissions(new String[]{Manifest.permission.GET_ACCOUNTS}, PERMISSION_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)


Nit*_*ddy 7

我最近遇到了同样的情况,当我需要检查支持片段内的权限并在那里获得回调.

我能够使用ContextCompatcheckSelfPermission,然后作为@NasaGeek所说的所谓android.support.v4.app.FragmentrequestPermissions请求许可,然后接到一个电话回onRequestPermissionsResult的V4片段.

希望这可以帮助.

谢谢.

  • 你能否请出示代码......我遇到了同样的问题. (2认同)