react native调用Android方法

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

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

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

一、RN调用Android方法

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

1、首先在Android项目中创建一个class类(类名随意),姑且叫MainMethods,继承ReactContextBaseJavaModule类,然后创建startActivity方法。


image
startActivity方法使用@ReactMethod暴露给RN

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

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

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


image

将MainMethods类注册到RN中。

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


image

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

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


image

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


image

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

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

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

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

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

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


image

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

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


image

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

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

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


image

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容