API геолокации не запрашивает местоположение в мобильном браузере - PullRequest
0 голосов
/ 19 ноября 2018

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

1 Ответ

0 голосов
/ 22 ноября 2018
  • 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

...