У меня есть WebView, и для загрузки некоторых страниц требуется разрешение для GeolocationPermissions. Для этого я переопределяю onGeolocationPermissionsShowPrompt(). ОК.Android M: Системное разрешение против разрешения на размещение WebView
Кроме того, мое приложение предназначено для SDK 23 (Android M) с новой моделью разрешений. Итак, мне нужно проверить, предоставил ли пользователь разрешение ACCESS_FINE_LOCATION, а если нет, отобразите диалоговое окно с запросом разрешения.
Как показать это диалоговое окно только для страниц, требующих GeolocationPermissions?
Обратный вызов onPermissionRequest (запрос PermissionRequest) не вызывается.
AndroidManifest:
WebView обратные вызовы
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, true);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
@Override
public 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);
}
Разрешение обратного
@Override
public 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);
}
}
Tha nks за вашу помощь!
ли вы заставить его работать в Android SDK 23 ? Я не могу, это как callback.invoke ничего не делает ... –