在ReactNative侧调用Android原生方法:
主要分四步:
1、在Android侧创建类,需要继承ReactContextBaseJavaModule。
public class NewsModule extends ReactContextBaseJavaModule {
private ReactApplicationContext context;
public NewsModule(ReactApplicationContext reactContext) {
super(reactContext);
this.context = reactContext;
}
@Override
public String getName() {
return "NewsModule";
}
@ReactMethod
public void showToast(){
Toast.makeText(context, "原生Toast消息", Toast.LENGTH_SHORT).show();
}
其中getName()方法返回的字符串,可以理解为NewsModule这个类的一个映射对象,即在RN侧通过该对象调用原生方法。类似JS与Android交互。showToast()方法即为被调用的方法,所有方法只有加上上述注解才可以被调用。
2、创建类实现ReactPackage,然后返回包含所有暴露给RN侧调用的module集合
public class NewsPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> moduleList=new ArrayList<>();
moduleList.add(new NewsModule(reactContext));
return moduleList;
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
3、在MainApplication中对创建的包进行注册。
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new RNGestureHandlerPackage(),
new NewsPackage()
);
4、在RN侧进行调用。
4.1、导入NativeModules包:import NativeModules from 'react-native';
4.2、调用方法:NativeModules.NewsModule.showToast();
大功告成!