无法在 Android 的浏览器上使用 Javascript 获取 GPS 坐标

Unable to get GPS coordinates using Javascript on browser in Android

我对 android、java 和 javascript 编码非常陌生。

我正在尝试获取当前的 GPS 坐标并随后在 Android 设备上对其进行跟踪。我正在使用 webview,并且大部分代码都是用 javascript 编写的。

这几天我进行了很多搜索并尝试了许多不同的方法,但我无法在 android 设备上获取 GPS 坐标。请查看代码并帮助我弄清楚为什么我没有获得 GPS 位置。

需要指出的几点是 -
1. 我下载并检查了其他传感器应用程序,可以看到当前显示的 GPS 坐标(因此 GPS 正在设备上工作)。
2. 当我运行我的代码时,我在通知区域看到 GPS 搜索图标,它一直在闪烁,但从未修复。
3. 当我在笔记本电脑浏览器上只运行带有 javascript 的 HTML 文件时,它会询问共享位置的权限,然后给出坐标,但是同一个文件在 android.

中没有显示任何内容

请查看下面的代码并帮助我解决这个问题。我已经尝试了很多,并将其发布为我最后的希望。

清单文件具有以下权限 -

1
2
3
4
5
6
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />

Android中的主要java代码有-

1
2
3
4
5
6
7
8
9
10
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    webView = new WebView(this);  
    webView.getSettings().setJavaScriptEnabled(true);  
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.loadUrl("file:///android_asset/mymap.html");
    setContentView(webView);
}

而带有 javascript 的 HTML 文件是 -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html>
<body onunload="OnUnload()" onload="getLocation()">
<p id="demo">Your coordinates:</p>

var watchID;
var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
       var options = {maximumAge:600000, timeout:100000, enableHighAccuracy: true};
       watchID = navigator.geolocation.watchPosition(showPosition,showError,options);
    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude:" + position.coords.latitude +
 "<br />Longitude:" + position.coords.longitude;  
  }
function showError(error)
  {
  switch(error.code)
    {
    case error.PERMISSION_DENIED:
      x.innerHTML="User denied the request for Geolocation."
      break;
    case error.POSITION_UNAVAILABLE:
      x.innerHTML="Location information is unavailable."
      break;
    case error.TIMEOUT:
      x.innerHTML="The request to get user location timed out."
      break;
    case error.UNKNOWN_ERROR:
      x.innerHTML="An unknown error occurred."
      break;
    }
  }

function OnUnload()
{
   alert ("The current document will be unloaded!");
   navigator.geolocation.clearWatch(watchID);
}  

</body>
</html>

提前非常感谢,
斧头


好吧,我做了进一步的搜索并找到了解决方案。我在此处发布这些链接作为对我的问题的回答,供任何来到这里寻找答案的人使用。

在加载 url 之前,我必须在我的 java 代码中添加这些行,然后我才能看到地理坐标。

1
2
3
4
5
6
7
    webView.getSettings().setGeolocationEnabled(true);
    webView.setWebChromeClient(new WebChromeClient() {
         public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            // callback.invoke(String origin, boolean allow, boolean remember);              
            callback.invoke(origin, true, false);
         }
        });

更多信息请点击这两个链接 -

  • android webview 地理定位
  • Android:使用 html5 使用 javascript api 确定 webview 中的地理位置


在 Android 6.0 手机上(不确定其他版本),这在我的 build.gradle 文件中对我来说是致命的:

1
targetSdkVersion: 23

减少到

1
targetSdkVersion 21

解决了我的问题。