前言:作为前端首次接触Android还真有点懵逼(再次感谢我的同事-java开发工程),一步一个脚印,Android也算是入了门,做RN基本上够用了。
建议:想做RN开发的同学简单学习下Android,Android中的代码风格,项目结构等等也都可以用到前端项目中(菜鸟见解)。
网上有很多这样的文章,我简单总结下(我用的Android Studio)。
一、RN调用Android方法
解释:这是一个RN调用Android方法跳转Android页面的例子,你可将startActivity方法中内容删除换成你需要逻辑。
1、首先在Android项目中创建一个class类(类名随意),姑且叫MainMethods,集成ReactContextBaseJavaModule类,然后吗?Android Studio很强大,Alt+Enter自动构建方法。(上图)
startActivity方法使用@ReactMethod暴露给RN
startActivity方法就是给RN中调用的,里面内容逻辑跟随自己业务来。
Android方法有了,下一步就注册方法。
2,又在创建一个class类(类名随意),姑且叫MainRNPackage,集成ReactPackage类,然后吗?Android Studio很强大,Alt+Enter自动构建方法。(上图)
将MainMethods类注册到RN中。
3、然后打开MainApplication类(没有的话自己创建一个),将上一步的MainRNPackage类注册到MainApplication中。(上图)
到这步Android中的发送就已经创建好了,也都暴露到RN原型上了,下一步RN调用Android方法。
4、现在Android中的方法都创建好了,我们怎么在RN中调用了。(上图)
使用RN中的NativeModules放中调用android中startActivity方法
使用NativeModules调用Android MainMethods类下startActivity方法
NativeModules.MainMethods.startActivity('xtt.android.doctor.LiveVideoActivity', data)
有同学会问你这是传的是什么东西,其实我这是一个RN跳转Android页面的封装方法,传递Android需要的class类名和参数跳转页面。
二、Android调用RN方法
1,新建一个class类(类名随意),姑且叫:EventEmitter类,定义一个static(静态)的变量mReactContext和方法sendEvent。(上图)
这里定义好sendEvent方法,他接受两个参数:
第一个参数:方法名,你需要调用RN的方法名
第二个参数:传参数,你需要传递的参数
下面这句代码是调用RN中的方法,emit(eventName,params)中的参数与上面的两个参数对应。
mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName,params);
2、还记得MainRNPackage类吗,不管是Android调用RN方法也是需要这个类的,这个类初始化会有一个reactContext(RN上下文)参数,你需要保存起来,不管是用全局变量保存还是别的方法。(上图)
看到那个EventEmitter.mReactContext没有,对的我就是这样保存reactContext(RN上下文)的
3、现在方法有了怎么用了,比如......。(上图)
直接调用EventEmitter下的sendEvent方法,传入方法名和参数(我这里传null是因为我这里不需要传参)
EventEmitter.sendEvent("RN的方法名",参数);
4、那Android调用了EventEmitter.sendEvent("liveEndCallback",null)方法我RN这边页面要怎么接收了,直接。(上图)
使用RN中的DeviceEventEmitter.addListener监听Android中的EventEmitter.sendEvent("liveEndCallback",null)方法,方法名要保持一致。
记住页面销毁的时候,移除监听,这样是完成了。