android 调用rn方法,RN调用原生方法---android(原生吐司为例)

一.用AS打开一个已存在的RN项目

二.在android原生这边创建一个类继承ReactContextBaseJavaModule,这个类里面放我们需要被rn调用的方法,封装成了一个原生模块:

新建一个类:

0818b9ca8b590ca3270a3433284dd417.png

取个名字:

0818b9ca8b590ca3270a3433284dd417.png

这里继承ReactContextBaseJavaModule,然后会报错,鼠标移上去会出现灯泡提示,点击灯泡可以自动帮我们导入解决

0818b9ca8b590ca3270a3433284dd417.png

分装模块:

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)列表里:

再建一个类:

0818b9ca8b590ca3270a3433284dd417.png

去 implements ReactPackage。然后会报错,鼠标移上去会提示import解决,然后会自动出现下面的创建原生模块和创建view管理器的函数

0818b9ca8b590ca3270a3433284dd417.png

把我们创建的类增加到原生列表中:

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 createNativeModules(ReactApplicationContext reactContext) {

//new一个原生模块列表

List modules=new ArrayList<>();

//列表加入我们刚刚自己创建的原生模块,传了一个reactContext上下文过去

modules.add(new MyNativeModule(reactContext));

//最后把列表返回

return modules;

}

//这里是创建view管理器

@Override

public List createViewManagers(ReactApplicationContext reactContext) {

return Collections.emptyList();//先不用,先emptyList

}

}

四.将第三步创建的包管理器添加到ReactPackage列表里(getPackages方法里)

打开MainApplication

0818b9ca8b590ca3270a3433284dd417.png

把第三步创建的包管理器添加到ReactPackage列表里(getPackages方法里)

在List getPackages方法里,new一个刚刚我们第三步创建的包

0818b9ca8b590ca3270a3433284dd417.png

五.在RN中去调用原生模块、添加NativeModules从react-native

在rn中要先引入NativeModules模块

0818b9ca8b590ca3270a3433284dd417.png

dianji(){

NativeModules.MyNativeModule.rnCallNative("rn调用原生成功啦");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值