onRequestPermissionsResult永远不会在片段中被调用

时间:2017-04-25 14:20:04

标签: android android-fragments android-permissions

下面的代码在Activity中工作正常,但我无法使其在片段内工作。

永远不会调用onRequestPermissionsResult

API级别23(Android 6.0)中有一个requestPermissions函数,但我需要让它在API级别21(Android 5.0)等较低级别上运行,所以不幸的是我无法使用它。 ActivityCompat.requestPermissions只是不会调用onRequestPermissionsResult

有什么建议吗?

public class MyFragment extends Fragment {

final int REQUEST_CODE = 120;

@Override
public View onCreateView(LayoutInflater infl, ViewGroup cont, Bundle bundle) {

    if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
        Log.i("LOG", "Asking for permission right now..");

        ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_CODE);


        //This is working but needs API level 23 (Android 6.0) - How to make this work on Android 5.0?
        //requestPermissions( new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_CODE);
    }

    return super.onCreateView(infl, cont, bundle);
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    Log.i("LOG", "onRequestPermissionsResult!");

    if (requestCode == REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.i("LOG", "GRANTED");
            Toast.makeText(getActivity(), "GRANTED,", Toast.LENGTH_LONG).show();

        } else {
            Log.i("LOG", "REFUSED");
            Toast.makeText(getActivity(), "REFUSED,", Toast.LENGTH_LONG).show();
        }
    }
}
}

2 个答案:

答案 0 :(得分:0)

在托管活动的onRequestPermissionResult内调用fragment.onRequestPermissionResult。

答案 1 :(得分:0)

在API 23中添加了在运行时中请求权限。因此它在旧版本中不起作用。在安装时授予超过23的API权限。

编辑:在请求权限之前,只需调用checkSelfPermission并在已经授予的情况下调用您的代码,而不是请求许可。