步骤一
在idea中,打开rn项目下的./android/app,这个过程需要一点儿时间,可能还需要下载gradle的依赖什么的。
步骤二
跟做原生app没差,我们新建一个testactivity,简单起见,仅实现如下:
public class testactivity extends appcompatactivity { private button mbtgoback; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_test); mbtgoback = (button) findviewbyid(r.id.bt_go_back); mbtgoback.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { finish(); } }); } }
步骤三
写一个类exampleinterface extends reactcontextbasejavamodule,在该类中接收消息。
具体代码:
public class exampleinterface extends reactcontextbasejavamodule { private reactapplicationcontext mrapplicationcontext; public exampleinterface(reactapplicationcontext reactcontext) { super(reactcontext); mrapplicationcontext = reactcontext; } //rn使用这个名称来调用原生模块的其他函数 @override public string getname() { return "exampleinterface"; } //必须写@reactmethod,将其注册为能够被react调用的函数 @reactmethod public void handlermessage(string amessage){ log.d("lt","====receive message from rn==="+amessage); //这部分实现简单的跳转 intent intent = new intent(mrapplicationcontext,testactivity.class); intent.addflags(intent.flag_activity_new_task); mrapplicationcontext.startactivity(intent); } }
步骤四
实现一个包管理器,并将接收消息的类exampleinterface,注册进去。
代码如下:
public class anexamplereactpackage implements reactpackage { @override public list<nativemodule> createnativemodules(reactapplicationcontext reactapplicationcontext) { list<nativemodule> modules = new arraylist<>(); modules.add(new exampleinterface(reactapplicationcontext)); return modules; } @override public list<class<? extends javascriptmodule>> createjsmodules() { return collections.emptylist(); } @override public list<viewmanager> createviewmanagers(reactapplicationcontext reactapplicationcontext) { return collections.emptylist(); } }
步骤五
在mainapplication中添加包管理类anexamplereactpackage;
@override protected list<reactpackage> getpackages() { return arrays.<reactpackage>aslist( new mainreactpackage(), new anexamplereactpackage() ); }
步骤六
在js界面,发送消息;
buttonpress:function(){ nativemodules.exampleinterface.handlermessage('test'); }