JavaScript должен быть включен в WebView
, используя
WebSettings.setJavaScriptEnabled (истина);
Приложению требуется разрешение ACCESS_FINE_LOCATION
WebView
должен использовать пользовательский WebChromeClient, который реализует WebChromeClient.onGeolocationPermissionsShowPrompt()
. Этот метод вызывается WebView
для получения разрешения на раскрытие местоположения пользователя в JavaScript. (В случае браузера мы показываем пользователю подсказку.) Реализация по умолчанию ничего не делает, поэтому разрешение никогда не получается, а местоположение никогда не передается в JavaScript. Простая реализация, которая всегда дает разрешение:
webView.setWebChromeClient (новый WebChromeClient () {
public void onGeolocationPermissionsShowPrompt (String origin, GeolocationPermissions.Callback callback) {
callback.invoke (origin, true, false);
}
});
Геолокация использует базы данных для сохранения кэшированных позиций и разрешений между сеансами. Расположение базы данных задается с помощью WebSettings.setGeolocationDatabasePath (...). Если местоположение базы данных не задано, постоянное хранилище будет недоступно, но в противном случае геолокация продолжит работать правильно. Чтобы установить местоположение баз данных, используйте
webView.getSettings().setGeolocationDatabasePath( context.getFilesDir().getPath() );
для получения дополнительной информации
link1
link2