原生模块可以用来进行rn与android之间数据的接收,发送。我们可以通过自定义原生模块访问平台所有能力。
首先通过NativeModules去访问到android层相应模块。
例:var tools = NativeModules.ToolsModule;获取相应模块。
android层继承ReactContextBaseJavaModule实现getName()方法,这个方法返回一个字符串名字。(该类必须要在ReactPackage中进行注册)
@Override
public String getName() {
return “ToolsModule";
}
1.进行android层数据请求。
通过 tools.request(参数, (datas) => {console.log(datas)}); 调用android层方法
android找到相应模块,调用到request方法,并接收到相应参数(也可以不传参数),在方法中去请求数据,并通过callback.invoke(Object object);把数据传回js层
@ReactMethod
public void request(String 接收参数, final Callback callback) {
Request request = new Request(new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
callback.invoke(msg.obj.toString());
}
});
request.setStbid(id);
request.requestParam();
}
2.调用android平台的一些能力。
通过tools.toast(参数, 时间); 调用android层方法
去android层,相应模块找到toast方法,接收数据。
@ReactMethod
public void toast(String text, int duration) {
Toast.makeText(mContext, text, duration).show();
}