API геолокации запрашивает одобрение пользователя в веб-браузерах, и с этим легко справиться, но в мобильных браузерах запрос на включение определения местоположения не отображается до тех пор, пока не будет включен GPS. Например, подсказка «www.abc.com нуждается в вашем местоположении» отображается только в том случае, если GPS включен. Есть ли способ запросить местоположение, даже если GPS отключен, и сделать это с помощью этого запроса?
API геолокации не запрашивает местоположение в мобильном браузере
Ответы (1)
JavaScript должен быть включен в
WebView
с помощью WebSettings.setJavaScriptEnabled(true);Приложению требуется разрешение
ACCESS_FINE_LOCATION
WebView
должен использовать собственный WebChromeClient, реализующийWebChromeClient.onGeolocationPermissionsShowPrompt()
. Этот метод вызываетсяWebView
для получения разрешения на раскрытие местоположения пользователя в JavaScript. (В случае браузера мы показываем пользователю подсказку.) Реализация по умолчанию ничего не делает, поэтому разрешение никогда не получается, и местоположение никогда не передается в JavaScript. Простая реализация, которая всегда предоставляет разрешение,webView.setWebChromeClient (новый WebChromeClient () { public void onGeolocationPermissionsShowPrompt (происхождение строки, обратный вызов GeolocationPermissions.Callback) { callback.invoke (происхождение, истина, ложь); } });
Геолокация использует базы данных для сохранения кэшированных позиций и разрешений между сеансами. Расположение базы данных задается с помощью WebSettings.setGeolocationDatabasePath(...). Если местоположение базы данных не задано, постоянное хранилище будет недоступно, но в противном случае геолокация продолжит работать правильно. Чтобы установить расположение баз данных, используйте
webView.getSettings().setGeolocationDatabasePath( context.getFilesDir().getPath() );
для получения дополнительной информации