- android端写一个类,提供一个方法gotoPage给web端js调用
public class JsInterface {
public static final String AndroidApi = "AndroidApi";
/**
* volatile 关键词确保当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance变量
*/
private volatile static JsInterface uniqueInstance;
private Context mContext;
private JsInterface(Context context) {
mContext = context;
}
public static JsInterface getInstance(Context context) {
if (uniqueInstance == null) {
synchronized (JsInterface.class) {
if (uniqueInstance == null) {
uniqueInstance = new JsInterface(context);
}
}
}
return uniqueInstance;
}
@JavascriptInterface
@SuppressWarnings("unused")
public void gotoPage(String pagename, String param) {
Logger.e("param :" + param);
Logger.e("pagename :" + pagename);
Logger.e("before");
if (JsonParser.isJSONValid(param)) {
if (pagename.equals("detail")) {
try {
JSONObject json = new JSONObject(param);
String link = json.optString("Link");
String id = json.optString("ID");
String brandID = json.optString("BrandID");
String sourceMall = json.optString("SourceMall");
ActivityUtil.switchToChaoGaoFanProductActivity(mContext, link, sourceMall, id, brandID);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
2. 在webview中调用addJavascriptInterface方法注入接口
JsInterface jsInterface = JsInterface.getInstance(this);
//addJavascriptInterface是Android提供的方法,包含两个参数。第一个是java中实现的类,类提供了javascript访问方法;第二个参数是java类映射到javascript的对象名。例如:js中widow.AndroidApi就代表android中JsInterface类,可以调用JsInterface中的方法,但是参数类型和个数要一致
mWebView.addJavascriptInterface(jsInterface,jsInterface.AndroidApi);