API геолокации не запрашивает местоположение в мобильном браузере

API геолокации запрашивает одобрение пользователя в веб-браузерах, и с этим легко справиться, но в мобильных браузерах запрос на включение определения местоположения не отображается до тех пор, пока не будет включен GPS. Например, подсказка «www.abc.com нуждается в вашем местоположении» отображается только в том случае, если GPS включен. Есть ли способ запросить местоположение, даже если GPS отключен, и сделать это с помощью этого запроса?


person inayatu    schedule 19.11.2018    source источник
comment
ссылка, хотите ли вы, чтобы это было в вашем приложении? ?   -  person Kevin Kurien    schedule 19.11.2018
comment
Нет, не в браузере приложений. Мне нужно сделать это для браузера Android по умолчанию и других браузеров, таких как Chrome, Firefox, Opera Mini и т. д.   -  person inayatu    schedule 20.11.2018
comment
ссылка Вы имеете в виду это?   -  person Kevin Kurien    schedule 20.11.2018
comment
Да, вы меня правильно поняли.   -  person inayatu    schedule 22.11.2018


Ответы (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() );

для получения дополнительной информации

link1 link2

person Kevin Kurien    schedule 22.11.2018