ef6d197219d5c9b79e98d1d97692b689.png

前言:作为前端首次接触Android还真有点懵逼(再次感谢我的同事-java开发工程),一步一个脚印,Android也算是入了门,做RN基本上够用了。

建议:想做RN开发的同学简单学习下Android,Android中的代码风格,项目结构等等也都可以用到前端项目中(菜鸟见解)。

网上有很多这样的文章,我简单总结下(我用的Android Studio)。

一、RN调用Android方法

解释:这是一个RN调用Android方法跳转Android页面的例子,你可将startActivity方法中内容删除换成你需要逻辑。

1、首先在Android项目中创建一个class类(类名随意),姑且叫MainMethods,集成ReactContextBaseJavaModule类,然后吗?Android Studio很强大,Alt+Enter自动构建方法。(上图)

fe6acefe881ec97e8332038f7fefbe2e.png
startActivity方法使用@ReactMethod暴露给RN

startActivity方法就是给RN中调用的,里面内容逻辑跟随自己业务来。

Android方法有了,下一步就注册方法。

2,又在创建一个class类(类名随意),姑且叫MainRNPackage,集成ReactPackage类,然后吗?Android Studio很强大,Alt+Enter自动构建方法。(上图)

80ada571a3d1bd62866d817636ee7172.png

将MainMethods类注册到RN中。

3、然后打开MainApplication类(没有的话自己创建一个),将上一步的MainRNPackage类注册到MainApplication中。(上图)

237fcfc6297c03119450af3cbe6d89d5.png

到这步Android中的发送就已经创建好了,也都暴露到RN原型上了,下一步RN调用Android方法。

4、现在Android中的方法都创建好了,我们怎么在RN中调用了。(上图)

3e0f1b85208d576293ec7b094a5f9cef.png

使用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。(上图)

96b6f358b3aec81b4d97ed3edb82ef0e.png

这里定义好sendEvent方法,他接受两个参数:

第一个参数:方法名,你需要调用RN的方法名

第二个参数:传参数,你需要传递的参数

下面这句代码是调用RN中的方法,emit(eventName,params)中的参数与上面的两个参数对应。

mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName,params);

2、还记得MainRNPackage类吗,不管是Android调用RN方法也是需要这个类的,这个类初始化会有一个reactContext(RN上下文)参数,你需要保存起来,不管是用全局变量保存还是别的方法。(上图)

0de64610298c333cd3107a3bd21ba128.png

看到那个EventEmitter.mReactContext没有,对的我就是这样保存reactContext(RN上下文)的

3、现在方法有了怎么用了,比如......。(上图)

a09af4bc8dde4fb9ea418a9350751584.png

直接调用EventEmitter下的sendEvent方法,传入方法名和参数(我这里传null是因为我这里不需要传参)

EventEmitter.sendEvent("RN的方法名",参数);

4、那Android调用了EventEmitter.sendEvent("liveEndCallback",null)方法我RN这边页面要怎么接收了,直接。(上图)

2976ad963cd25702323b71726235da1c.png

使用RN中的DeviceEventEmitter.addListener监听Android中的EventEmitter.sendEvent("liveEndCallback",null)方法,方法名要保持一致。

记住页面销毁的时候,移除监听,这样是完成了。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐