从 v4 请求运行时权限。片段并让回调转到片段?

我遇到了一个奇怪的问题,导致冲突。我不得不切换到本机来修复它,但是存在错误。Fragments

我最初的问题:我有一个导航抽屉设置,在我的一个片段中请求权限,我称之为提示显示得很好,但是当我接受或拒绝权限时,没有任何反应。从不调用回调。相反,它会在我的片段附加到的活动中调用。对我来说没用,我需要回调才能在片段中工作。v4 Fragments.ActivityCompat.requestPermissions(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION, 1);onRequestPermissionsResult()

考虑到这一点,我被告知我需要使用,但这只能与 ,所以我将导航抽屉更改为从本机片段工作,而不是 v4 支持库片段。但是,由于我正在使用AppCompatActivity,因此某些事情不起作用,例如并返回到以前的片段。FragmentCompatnative Fragments (v13+)addToBackStack()

长话短说,有谁知道我如何使用,并且仍然在中调用权限并让回调在?我觉得这是Android中的一个错误,尚未得到解决,但我不是100%。v4.FragmentFragmentFragment

如果您需要查看我的代码,请告诉我,这只是运行时权限所需的标准方法,我想使用v4 Fragments,尽管从我的理解来看,这不起作用。


答案 1

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

@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);
        }
    }
}

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


答案 2

如果您需要获得权限结果,请确保您使用fragment v4

Fragment.requestPermission(String[], int);

而不是

AppCompat.requestPermission(Activity, String[], int)

看看这个答案!


推荐