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级别的扩展功能的本机类的人员.
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)
我最近遇到了同样的情况,当我需要检查支持片段内的权限并在那里获得回调.
我能够使用ContextCompat到checkSelfPermission,然后作为@NasaGeek所说的所谓android.support.v4.app.Fragment的requestPermissions请求许可,然后接到一个电话回onRequestPermissionsResult的V4片段.
希望这可以帮助.
谢谢.