在moduleLibrary中创建一个WeexModule继承WXModule类,写法与Weex官网一致
Module 扩展
1、Module 扩展必须继承 WXModule 类。
2、扩展方法必须加上@JSMethod (uiThread = false or true)
注解。Weex 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。
3、Weex是根据反射来进行调用Module扩展方法,所以Module中的扩展方法必须是 public 类型。
4、同样因为是通过反射调用,Module不能被混淆。请在混淆文件中添加代码:-keep public class * extends com.taobao.weex.common.WXModule{*;}
5、Module 扩展的方法可以使用 int, double, float, String, Map, List 类型的参数
6、完成 Module 后一定要在初始化时注册 WXSDKEngine.registerModule("myModule", MyModule.class);
否则会报类似错误:ReportException :undefined:9: TypeError: Object #<Object> has no method 'printLog'
示例如下:
public class MyModule extends WXModule {
//run ui thread
@JSMethod (uiThread = true)
public void printLog(String msg) {
Toast.makeText(mWXSDKInstance.getContext(),msg,Toast.LENGTH_SHORT).show();
}
//run JS thread
@JSMethod (uiThread = false)
public void fireEventSyncCall(){
//implement your module logic here
}
}
在moduleLibrary中新建一个WebModule类,该类不继承其他类。 提供给前端调用的方法必须是public的静态方法,方法第一个形参必须是ExtendWebView。
示例如下:
public class MyWebModule {
public static void printLog(ExtendWebView webView,String msg) {
Toast.makeText(webView.getContext(),msg,Toast.LENGTH_SHORT).show();
}
public static void fireEventSyncCall(ExtendWebView webView){
//implement your module logic here
}
}
需要创建一个entry类 该类需要用@ModuleEntry注解来标注,该类注册插件代码必须写在public的init()方法内 Weex插件与官网说明注册的方式一致,Web插件注册使用WebCallBean.addClassData来注册。
示例如下:
@ModuleEntry
public class MyEntry {
/**
* ModuleEntry
* @param context
*/
public void init(Context context) {
try {
WXSDKEngine.registerModule("myplugin", MyModule.class);
} catch (WXException e) {
e.printStackTrace();
}
WebCallBean.addClassData("myplugin", MyWebModule.class);
}
}
include ':app'
include ':pmuiCitypicker'
project (":pmuiCitypicker").projectDir = new File("../Plugins/PMUI-Citypicker/android")
include ':pmuiPowerenter'
project (":pmuiPowerenter").projectDir = new File("../Plugins/PMUI-Powerenter/android")
include ':pmuiGestureLock'
project(":pmuiGestureLock").projectDir = new File("../Plugins/PMUI-GestureLock/android")
public static void verify(ExtendWebView webView, String userName, String groupName, JsCallback jsCallback) {
myApp().verify(webView.getContext(), userName, groupName, pmui.MCallback(jsCallback));
H5ActivityResultManager.getInstance().put(new OnH5ActivityResult() {
@Override
public void onGetResult(int requestCode, int resultCode, Intent data) {
//注意:需要在此将这个OnH5ActivityResult实例从list中移除
H5ActivityResultManager.getInstance().remove(this);
myApp().onActivityResult(requestCode, resultCode, data);
}
});
}