下面的代码在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();
}
}
}
}
答案 0 :(得分:0)
在托管活动的onRequestPermissionResult内调用fragment.onRequestPermissionResult。
答案 1 :(得分:0)
在API 23中添加了在运行时中请求权限。因此它在旧版本中不起作用。在安装时授予超过23的API权限。
编辑:在请求权限之前,只需调用checkSelfPermission并在已经授予的情况下调用您的代码,而不是请求许可。