Android Webview - navigator.geolocation.getCurrentPosition не работает - PullRequest
0 голосов
/ 05 июня 2018

У меня очень, очень простой сценарий, и я сталкиваюсь с очень распространенной проблемой (замечаемой многими пользователями StackOverflow с течением времени).Однако я перепробовал каждое предложенное решение, и ни одно из них, похоже, не работает.Может кто-нибудь помочь решить этот вопрос раз и навсегда?

Я создаю приложение для Android (предположим, для Android 7), которое содержит веб-представление, которое указывает на веб-сайт, который реализует очень простую геолокацию.(Моя последняя, ​​очень урезанная версия сайта просто отображает широту и долготу пользователя.)

Я могу нормально просматривать сайт (и он отлично отображает широту / логичность) в Chrome.Но когда я запускаю приложение с помощью Webview, ничего не отображается.

За последние несколько дней я пытался, казалось бы, каждое предлагаемое решение (в MainActivity.java) решить эту проблему, но ни одно из решений, похоже, не работает.

Я добавил все мыслимые разрешения в AndroidManifest.xml.

Что нужно сделать, чтобы заставить это работать?

Конечно, просмотр сайта с геолокацией вAndroid-приложение с Webview должно быть довольно простым, верно ???

Редактировать: Я немного сузил круг вопросов.Я запросил у пользователя разрешения во время выполнения и подтвердил, что геолокация разрешена.Я также подтвердил, что Javascript, в общем, разрешен моим приложением.

Кажется, что проблема с ключом / ядром заключается в следующем: не , по-видимому, работает в Webview.

navigator.geolocation.getCurrentPosition(success, error);

Я не знаю почему, но в этом проблема.

Ссылка:

Ошибка веб-просмотра Android при запросе геолокации

Приложение не имеет достаточных разрешений геолокации

Доступ к местоположению в Chrome, не работает в WebView

Android Запрос разрешения использования местоположения в веб-представлении

Минимальная геолокационная веб-страница: (Как настроить отображение в веб-обозревателе Android?)

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Webview Test</title>

</head>
<body>

<div id='output'></div>

<script>

function success(pos) {

  var latitude = pos.coords.latitude;
  var longitude = pos.coords.longitude;

  document.getElementById('output').innerHTML = `Your current position is:  Latitude : ${latitude} Longitude: ${longitude}`;
}

function error(err) {
  console.warn('ERROR(${err.code}): ${err.message}');
}

navigator.geolocation.getCurrentPosition(success, error);

</script>

</body>
</html>

1 Ответ

0 голосов
/ 07 июня 2018

Создать класс JavaScriptReceiver.java

public class JavaScriptReceiver
{
Context mContext;
/** Instantiate the receiver and set the context*/
JavaScriptReceiver(Context c) {
mContext = c;
}
@JavascriptInterface
public void showShopping(){
Intent intent = new Intent(mContext, ShoppingActivity.class);
mContext.startActivity(intent);
}
@JavascriptInterface
public void showOrders(int orderid){
Intent intent = new Intent(mContext, MyOrdersActivity.class);
intent.putExtra("order",orderid);
mContext.startActivity(intent);
}
}

Затем вызвать addjavascriptinterface() интерфейс через объект WebView.

JavaScriptReceiver javaScriptReceiver;
javaScriptReceiver = new JavaScriptReceiver(this);
webView.addJavascriptInterface(javaScriptReceiver, "JSReceiver");
...