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 手机上(不确定其他版本),这在我的
1 | targetSdkVersion: 23 |
减少到
1 | targetSdkVersion 21 |
解决了我的问题。