android 与h5互调还是很简单的。
首先需要基本配置下webview。 这里都不是重点,可以忽视。
wb_content.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
wb_content.getSettings().setDomStorageEnabled(true);
wb_content.getSettings().setDatabaseEnabled(true);
wb_content.getSettings().setAppCacheEnabled(true);
String cacheDirPath = context.getFilesDir().getAbsolutePath() + APP_CACHE_DIRNAME;
wb_content.getSettings().setDatabasePath(cacheDirPath);
wb_content.getSettings().setPluginState(WebSettings.PluginState.ON);
wb_content.getSettings().setAppCacheEnabled(true);
wb_content.getSettings().setGeolocationEnabled(true);
wb_content.getSettings().setGeolocationDatabasePath(context.getFilesDir().getPath());
wb_content.setWebViewClient(new WebActivity.webViewClient());
一 . js 调用 android
1. 设置js调用 android的接口
wb_content.addJavascriptInterface(this,"androidapp");
this,代码实现 这个接口的地方。 不需要 implements java 接口。 一般传入一个class类。 类里面实现下面的说的方法。
"androidapp" ,js与android 。一起定义的接口类 名称。
2. h5代码调用:
window.androidapp.xx方法名();
window,窗口
androidapp:上面一起商定的接口类名称.
xx方法名: java 代码的方法名
2.1 h5带参调用android
如果是数字,js需要强制number类型。不需要冒号。android 就可以了。
字符串,带上冒号。
3. java 实现的方法 , 需要加上注解:@JavascriptInterface
@JavascriptInterface // js调用 java 方法 注解必须加上
public void javaFunctionName() {
// 运行实现 webview 的子线程中, 注意更新ui等,需要去主线程
mContext.runOnUiThread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(mContext, GlShangBaoActivity.class);
mContext.startActivity(intent);
}
});
}
4.总结: 1.是定一个公共的名称: androidapp ,设置进 webview.wb_content.addJavascriptInterface(this,"androidapp");
2.h5通过 window.公共的名称.java方法名
3.java 在方法上 实现 :@JavascriptInterface 的注解,注意方法是public
android 调用 H5
1. 需要配置下webview
webview.getSettings().setJavaScriptEnabled(true);
2. 获得h5的方法名
3. 拼出 javascript: +方法名 ,可以理解为下面 u这个字符 串 javascript: 后面这部分是个 方法 调用。
String u="javascript:geidingwei('" +la+"','"+ lo+"')";
webview.loadUrl(u);
4. 注意一点:如果需要转移的string,需要加上 单引号 ‘’;
String i ="我 ";String y="你";
String u= " javascript:geidingwei(" +x +"," +y+")"
如果你是手动 拼接的话就需要在 会被转移的地方加上‘’
String u= " javascript:geidingwei(" + " ' 我 ' " + " ,"+ " ' 你 ' " + ")"
一般不建议手动拼,用个String 变量代替,就跟java方法一样的。