Moudle是什么?
Module是基于快应用基础架构扩展出来的自定义模块,是为sdk提供扩展功能的模块,例如下载功能、Toast等。
如果SDK默认提供的功能无法满足需求,可以通过自定义的方式实现自己的功能,例如自己的加密算法、支付模块等。
如何自定义?
自定义功能需要注意一下几点:
Module实现IEsModule接口
方法必须是public方法,且同一个Module中不允许同名方法
参数支持类型:
基本数据类型:
int
,String
,boolean
数组类型:
EsMap
,EsArray
回调类型:
EsPromise
Android端代码:
点击查看源码
// 实现IEsModule接口
public class MyModule implements IEsModule {
@Override
public void init(Context context) {
}
// 显示Toast
public void showToast(String message) {
//ToastUtils.showToastShort(msg);
Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
}
// ❌ 错误!!!同一个Module中不允许同名方法
// 会导致vue调用不成功
public void showToast() {}
// 检测应用是否安装 带promise的回调方式
public void isAppInstall(String packageName, EsPromise promise) {
try {
PackageInfo info = mContext.getPackageManager().getPackageInfo(packageName, 0);
if(info != null) {
PromiseHolder.create(promise).singleData(true).sendSuccess();
return;
}
} catch (Exception e) {
}
PromiseHolder.create(promise).singleData(false).sendSuccess();//用内部提供个的工具直接发送
//或者通过EsMap调用发送 promise必须要返回 否则vue层会有阻塞
EsMap map = new EsMap();
map.pushInt(key,value)
map.pushString(key,value)
try {
promise.resolve(map);
} catch (Throwable e) {
promise.reject("程序异常");
e.printStackTrace();
}
}
@Override
public void destroy() {
}
@Override
public void destroy() {
}
}
// 向指定的IEsComponent或者IEsModule发送事件(全局事件)
private void sendNativeEvent() {
EsMap esMap = new EsMap();
esMap.pushInt("status", 1);
EsProxy.get().sendNativeEventTraceable(this, "onStatusChanged", esMap);
}
注册
InitConfig initConfig = InitConfig.getDefault();
initConfig.setAppId("注册的APPID")
.setSdkInitCallback(new EsKitInitCallback() { //使用EsKitInitCallback监听 注册你需要的自定义模块
@Override
public void onEsKitInitSuccess() {
// 注册到SDK
EsManager.get().registerModule(MyModule.class.getName());
}
});
Vue调用
点击查看源码
// 参数1: module名称 参数2: 方法名称 参数3: 方法参数
Vue.Native.callNative('MyModule', 'showToast', "hello");
// 调用需要返回值的方法
Vue.Native.callNativeWithPromise('MyModule', 'isAppInstall', 'com.extscreen.runtime')
.then((isInstall)=>{
console.log('isAppInstall', isInstall)
});
// vue层接收回调信息
//注册:
ESApp.$on('onStatusChanged', this.onStatusChanged);
//取消注册:
ESApp.$off('onStatusChanged', this.onStatusChanged);
//处理回调
function onStatusChanged(e) {
const status = e.status;
console.log(`接收到的状态码:${ status}`);
}