Android Webview - navigator.geolocation.getCurrentPosition 不起作用

问题描述 投票:0回答:2

我有一个非常非常简单的场景,但我遇到了一个非常常见的问题(随着时间的推移,许多 StackOverflow 用户都注意到了)。但是,我已经尝试了所有建议的解决方案,但似乎都不起作用。有人可以帮忙一劳永逸地解决这个问题吗?

我正在构建一个 Android 应用程序(假设是 Android 7),其中包含一个 Webview,该 Webview 指向一个实现非常简单的地理定位的网站。 (我最新的、非常精简的网站版本仅显示用户的纬度和经度。)

我可以在 Chrome 中很好地查看该网站(并且它完美地显示纬度/经度)。但是当我使用 Webview 运行应用程序时,没有任何显示。

在过去的几天里,我似乎尝试了针对此问题的所有建议解决方案(在 MainActivity.java 中),但似乎没有一个解决方案有效。

我已经在 AndroidManifest.xml 中添加了所有可以想象到的权限。

需要做什么才能使其发挥作用?

当然,在 Android 应用程序中使用 Webview 查看具有地理位置的网站应该相当简单,对吗???

编辑:我已经缩小了范围。我已在运行时提示用户授予权限,并且已确认允许进行地理定位。我还确认我的应用程序通常允许使用 Javascript。

剩下的关键/核心问题似乎是这样的: 以下内容not似乎在Webview中工作。

navigator.geolocation.getCurrentPosition(success, error);

我不知道为什么,但这就是问题所在。

参考:

Android webview 请求地理位置时出错

应用程序没有足够的地理位置权限

在 Chrome 中访问位置,在 WebView 中不起作用

Android 请求在 webview 中使用位置的权限

最小地理定位网页: (如何让这个显示在Android Webview中?)

<!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>
android geolocation android-webview
2个回答
0
投票

创建一个类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");

0
投票

在 flutter 中我们有一次地理定位选项 InAppWebViewGroupOptions( android: AndroidInAppWebViewOptions( 地理定位已启用:true, )

© www.soinside.com 2019 - 2024. All rights reserved.