【发布时间】:2019-07-07 09:33:47
【问题描述】:
在我的 android 项目中,我使用此代码来检查和请求运行时权限:
public class AgentsFragmentMapTab extends RootFragment implements ActivityCompat.OnRequestPermissionsResultCallback
{
//..
private boolean checkAndRequestPermissions() {
int internet = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.INTERNET);
int loc = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION);
int loc2 = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
List<String> listPermissionsNeeded = new ArrayList<>();
if (internet != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.INTERNET);
}
if (loc != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (loc2 != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (BuildConfig.DEBUG)
Log.d(TAG, "checkAndRequestPermissions_listPermissionsNeeded(" + listPermissionsNeeded.size() + ")");
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), LOCATION_REQ_CODE);
return false;
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == LOCATION_REQ_CODE) {
} else {
}
}
}
这段代码完美地显示了权限对话框。但是当我点击 Allow 或 Deny 按钮时,onRequestPermissionsResult() 方法不会被调用。为什么它没有被调用以及如何实现这一点?
【问题讨论】:
-
覆盖父activity中的onRequestPermissionsResult方法,然后将结果推送到这个fragment。
-
但我需要处理片段中的单击按钮允许
-
我强烈建议你使用 dexter 权限库
-
ActivityCompat.requestPermissions仅将结果发送到 Activity,因为它不知道您的 Fragment。你为什么不在Fragment本身上使用requestPermissions?
标签: java android fragment android-permissions