我会尽量把这点说清楚。我通常不擅长提出明确的问题,因此在此先感谢您阅读本文并发表任何建议。
我正在编写一个需要用户位置的简单 android 应用程序。我正在使用 webview 以及 HTML navigator.geolocation.getCurrentPosition 功能来跟踪用户。
我遇到的问题是将 HTML 文件中收集的坐标输入到我的 android/java 应用程序中。我在我的 webview 中使用 javascriptInterface 在两者之间进行通信。
这是我在 java 代码中对 webview 的声明。
//Create the web-view
final WebView
wv = (WebView) findViewById(R.id.webview);
wv.getSettings().setJavaScriptEnabled(true);
//Creates the interface "Android". This class can now be referenced in the HTML file.
wv.addJavascriptInterface(new WebAppInterface(this),"Android");
wv.setWebChromeClient(new WebChromeClient());
这是 WebAppInterface 代码
public class WebAppInterface extends Activity
{
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {mContext = c;}
//Used to display Java Toast messages for testing and debugging purposes
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void storeCoord(String myLat,String myLong)
{
Log.d("Coordinate Log","HTML call to storeCoords()");
//Log.d("Coord Lat", myLat);
//Log.d("Coord Long", myLong);
}
}
最后但同样重要的是,这是我的 HTML 代码
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
function storePosition(position)
{
Android.showToast("In storePosition()");
myLat = position.coords.latitude;
myLong = position.coords.longitude;
Android.showToast(myLat +" "+ myLong);
Android.storeCoord(myLat,myLong);
}
function fail(error){}
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(storePosition,fail,{enableHighAccuracy:true,timeout:10000});
}
</script>
</body>
截至目前,每次我想收集用户的坐标时,我都在使用以下代码行
wv.loadUrl("file:///android_asset/CurrentLocationCoordinates.html");
这工作正常,直到调用 storePosition 函数。我认为这与我没有专门从 loadURL 调用 storePosition 函数有关,所以我尝试了
wv.loadUrl("javascript:storePosition()");
哪个有效。但是!!...我没有从 navigator.geolocation.getCurrentPosition 收集到的位置来发送到函数 storedPosition,所以显然没有任何反应。我在网上到处搜索解决方案,我得出的结论是我根本不明白 webview.LoadURL 函数是如何工作的。我需要获取存储在我的 android 应用程序中的坐标!
再次感谢您的时间和建议。