Android Webview - navigator.geolocation.getCurrentPosition无效

时间:2018-06-04 21:18:29

标签: android geolocation android-webview

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

我正在构建一个Android应用程序(适用于Android 7,让我们假设),它包含一个Webview,指向一个实现非常简单的地理位置的网站。 (我最新的,非常精简的网站版本只显示用户的纬度和经度。)

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

在过去的几天里,我似乎尝试了所有提出的解决方案(在MainActivity.java中)来解决这个问题,但是没有一个解决方案似乎有效。

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

要让它发挥作用需要做些什么?

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

编辑:我已经缩小了一些内容。我已在运行时提示用户输入权限,并且我已确认允许使用地理位置。我也确认我的应用程序允许使用Javascript。

关键/核心剩余问题似乎是这样的: 以下似乎可以在Webview中使用。

navigator.geolocation.getCurrentPosition(success, error);

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

价:

Android webview error when asking for geolocation

The application does not have sufficient geolocation permissions

Location is accessed in Chrome, doesn't work in WebView

Android Ask for permission to use location within 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>

1 个答案:

答案 0 :(得分:1)

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