我正在开发本机应用程序。我的应用程序有一个WebView
. 我想记录这个WebView
组件的每一个动作。单击了哪个按钮,拖动了哪个图像。之后,我将记录那些我想存储在 SQLite 中的东西。
所以,我用谷歌搜索并找到WebAppInterface
了哪些通信 Java 和 JavaScript。但这种交流是不够的。我无法从WebAppInterface
课堂上发送数据库。
我实际上想问这个问题(分钟46:00
)。
是否可以?或者,另一种解决方案?
问候,
我正在开发本机应用程序。我的应用程序有一个WebView
. 我想记录这个WebView
组件的每一个动作。单击了哪个按钮,拖动了哪个图像。之后,我将记录那些我想存储在 SQLite 中的东西。
所以,我用谷歌搜索并找到WebAppInterface
了哪些通信 Java 和 JavaScript。但这种交流是不够的。我无法从WebAppInterface
课堂上发送数据库。
我实际上想问这个问题(分钟46:00
)。
是否可以?或者,另一种解决方案?
问候,
您应该像这样将javascript界面添加到您的webView:
webView.addJavascriptInterface(new JavascriptInterface(this), "AndroidFunction");
您应该创建接口类:
public class JavascriptInterface{
Context mContext;
JavascriptInterface(Context c) {
mContext = c;
}
public void save(String action){
// save to database
}
}
在网站上,您应该致电:
AndroidFunction.save("actionName");
官方链接:http: //developer.android.com/reference/android/webkit/WebView.html
class JsObject {
@JavascriptInterface
public String toString() { return "injectedObject"; }
}
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("", "text/html", null);
webView.loadUrl("javascript:alert(injectedObject.toString())");
------------------------------------------- 必须 API>17
我的调整,HTML,jsobj.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hello TEST JS</title>
</head>
<body style="background: white; font-family: Helvetica">
<script type="text/javascript">
document.write(AndroidFunction.show());
AndroidFunction.save("abc");
</script>
</html>
安卓:
web.addJavascriptInterface(new JsObject(), "AndroidFunction");
...
class JsObject{
@JavascriptInterface
public void save(String action){
L.d("action:"+action);
}
public String show(){
return "Hello Android";
}
}
你有没有看过 PhoneGap 和 Cordova 插件?Cordova 插件在 Java 到 webview 和 webview 到 Java 之间提供了非常强大的通信。并且已经有一些关于记录数据的开源插件,您可以将其嵌入到您的应用程序中。
看看这个链接:Cordova Plugin