我有一个WebVIEw,加载的某些页面需要GeolocationPermissions的权限.为此,我重写了onGeolocationPermissionsShowPrompt().好.
另外,我的应用使用新的权限模型定位SDK 23(Android M).因此,我需要检查用户是否授予了权限ACCESS_FINE_LOCATION,如果没有,则显示一个询问该权限的对话框.
如何仅对需要GeolocationPermissions的页面显示该对话框?
不调用回调onPermissionRequest(PermissionRequest request).
AndroIDManifest:
WebVIEw回调
@OverrIDepublic voID onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { callback.invoke(origin, true, true); super.onGeolocationPermissionsShowPrompt(origin, callback);}@OverrIDepublic voID onPermissionRequest(PermissionRequest request) { if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ requestLocationPermission(); else { super.onPermissionRequest(request); }
显示对话框权限
private voID requestLocationPermission() { if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) { new ADPDialogFragment(getActivity()) { @OverrIDe public String getTitre() { return getString(R.string.mob_he_configuration_dialogue_message_titre); } @OverrIDe public String getMessage() { return getString(R.string.permission_location_rationale); } @OverrIDe public voID doPositiveClick() { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION); } }.show(getFragmentManager(), TAG);} else { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);}
权限回调
@OverrIDepublic voID onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == REQUEST_LOCATION) { // BEGIN_INCLUDE(permission_result) // Received permission result for camera permission. Log.i(TAG, "Received response for Camera permission request."); // Check if the only required permission has been granted if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Camera permission has been granted, prevIEw can be displayed } else { Toast.makeText(getActivity(), getString(R.string.permissions_not_granted), Toast.LENGTH_SHORT).show(); } // END_INCLUDE(permission_result) } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}
谢谢你的帮助!
解决方法:
您可以在调用onGeolocationPermissionsShowPrompt时请求用户的许可:
@OverrIDepublic voID onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED) { mCallback = callback; mOrigin = origin; requestLocationPermission(); } else { callback.invoke(origin, true, true); }}
并且当用户选择授予您权限时:
@OverrIDepublic voID onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){ switch (requestCode) { case REQUEST_LOCATION: if (mCallback != null && mOrigin != null) mCallback.invoke(mOrigin, grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED, false); mCallback = null; mOrigin = null; break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}
总结 以上是内存溢出为你收集整理的Android M:系统权限与WebView位置权限全部内容,希望文章能够帮你解决Android M:系统权限与WebView位置权限所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)