最近做了一个百度地图调用 安卓原生方法获取信息显示在h5上的功能,遇到两个问题
问题1:app 内 alert 不显示问题
解决办法:webView 配置允许弹出框
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// TODO Auto-generated method stub
return super.onJsAlert(view, url, message, result);
}
});
问题1:app 返回JSONString js无法识别
解决办法:
webView.addJavascriptInterface(this, “android”); 给window 对象配置 android 成员
实现 JsToAndroid() 接口
@JavascriptInterface
public String JsToAndroid() {
//CarStatusInfo carStatus = new CarStatusInfo();
JSONObject obj = new JSONObject();
try {
/*obj.put("lat", carStatus.getLatitude());
obj.put("lon", carStatus.getLatitude());
obj.put("speed", carStatus.getSpeed() + "KM/H");*/
obj.put("lat", 106.81175449);
obj.put("lon", 26.54419939);
obj.put("speed", "100 KM/S");
return obj.toString(); //返回值一定要配置成js 和 java 可以识别的基础数据类型,在C# 调用 C++ 也是如此,因为自定义数据类型跨语言是无法识别的
}
catch (Exception e)
{
e.printStackTrace();
return obj.toString();
}
}
js 端代码
var jsobj = window.android.JsToAndroid();