RN调用原生方法基础---android(原生吐司为例)
2017-10-21 00:00
337 查看
一.用AS打开一个已存在的RN项目
二.在android原生这边创建一个类继承ReactContextBaseJavaModule,这个类里面放我们需要被rn调用的方法,封装成了一个原生模块:
在app>java>com.xxxx中新建一个类:取个名字:
这里继承ReactContextBaseJavaModule,然后会报错,鼠标移上去会出现灯泡提示,点击灯泡可以自动帮我们导入解决
分装模块:
package com.rnhybriddemo1; import android.content.Context; import android.widget.Toast; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; /** * Created by chason on 2017/10/21. */ public class MyNativeModule extends ReactContextBaseJavaModule{ private ReactApplicationContext mContext; //给一个上下文 //这里是构造方法 public MyNativeModule(ReactApplicationContext reactContext) { super(reactContext); mContext=reactContext;//得到一个reactContext } @Override public String getName() { return "MyNativeModule";//一定要有名字,返回一个名字,到时候rn代码中通过这个名字访问类里面的方法 } //函数不能有返回值,因为被调用的原生代码是异步的,原生代码执行结束之后只能通过回调函数或者发送消息给rn那边 //自己写的方法,rn调用的 @ReactMethod //这里要加上注解,方法才能被调用 public void rnCallNative(String msg){ //吐司,需要一个上下文环境 Toast.makeText(mContext,msg,Toast.LENGTH_SHORT).show(); //上下文环境,内容,长度 } }
三.在android原生这边创建一个类实现接口ReactPackage包管理器,并把第二步创建的类加到原生模块(NativeModule)列表里:
在app>java>com.xxxx中再建一个类:去 implements ReactPackage。然后会报错,鼠标移上去会提示import解决,然后会自动出现下面的创建原生模块和创建view管理器的函数
把我们创建的类增加到原生列表中:
package com.rnhybriddemo1; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by chason on 2017/10/21. */ public class MyReactPackage implements ReactPackage{ //这里是创建原生模块 @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { //new一个原生模块列表 List<NativeModule> modules=new ArrayList<>(); //列表加入我们刚刚自己创建的原生模块,传了一个reactContext上下文过去 modules.add(new MyNativeModule(reactContext)); //最后把列表返回 return modules; } //这里是创建view管理器 @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList();//先不用,先emptyList } }
四.将第三步创建的包管理器添加到ReactPackage列表里(getPackages方法里)
打开MainApplication把第三步创建的包管理器添加到ReactPackage列表里(getPackages方法里)
在List<ReactPackage> getPackages方法里,new一个刚刚我们第三步创建的包
五.在RN中去调用原生模块、添加NativeModules从react-native
在rn中要先引入NativeModules模块dianji(){ NativeModules.MyNativeModule.rnCallNative("rn调用原生成功啦"); }
相关文章推荐
- js调用android原生方法,简单明了。
- android基础笔记:服务(Service) 采用接口的方式调用本地服务的方法
- Unity3D 调用Android原生方法2
- 通过js调用android原生方法
- (八)React Native实现调用android原生java方法并实现广播的发送和接受
- WebView原生方法---使用javascript调用android代码
- Unity3D 调用Android原生方法
- js调用ios原生多种写法参考及js调用android原生方法参考
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android 中最简单的实现 HTML(H5)调用native原生页面的方法
- Android原生方法和Web JS互相调用
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- RN调用android原生UI组建--kenBurnView组件(已分装)的例子
- ReactNative(嵌入到android)调用android原生组件与原生模块(比如某个方法)
- 通过js调用android原生方法
- 原生Android向RN发送消息---(RN调用原生选择联系人,原生发送姓名和手机到RN例子)
- Unity3D 调用Android原生方法
- 23、JS调用Android原生代码方法
- Unity调用原生(iOS, Android)方法
- Unity3D 调用Android原生方法