RN中想从JS调用Native中方法时,一般都需要通过自定义Native Module的方式来实现,下面来看一下如何在Android中实现一个自定义的Module。

Step 1

继承ReactContextBaseJavaModule,实现它的getName方法。
name用来以后Module的使用。

public class UserCenterAndroidModule extends ReactContextBaseJavaModule {    public UserCenterAndroidModule(ReactApplicationContext reactContext) {        super(reactContext);    }    @Override    public String getName() {        return "UserCenterAndroid";    }

Step 2

添加要暴露的方法,并 添加 @ReactMethod 注解。

@ReactMethod    public boolean hasUserLogin() {        return UserInfoSharedPreference.getUserStatus(getReactApplicationContext()) != UserStatusUtil.USER_STATUS_UNLOGIN;    }

需要注意的是支持的方法参数类型与JS中类型的对应关系:

Boolean -> BoolInteger -> NumberDouble -> NumberFloat -> NumberString -> StringCallback -> functionReadableMap -> ObjectReadableArray -> Array

Step 3

在Android工程中注册Module。

public class UserCenterReactPackage implements ReactPackage {    @Override    public List createNativeModules(ReactApplicationContext reactContext) {        List modules = new ArrayList<>();        modules.add(new UserCenterAndroidModule(reactContext));        return modules;    }    @Override    public List> createJSModules() {        return Collections.emptyList();    }    @Override    public List createViewManagers(ReactApplicationContext reactContext) {        return Collections.emptyList();    }}

在ReactInstanceManager的实例中添加Module。

reactRootView = new ReactRootView(getActivity());//ReactInstanceManager最好是单例的reactInstanceManager = ReactInstanceManager.builder()        .setApplication(getActivity().getApplication())        .setBundleAssetName("index.android.bundle")        .setJSMainModuleName("index.android")        .addPackage(new MainReactPackage())        .addPackage(new UserCenterReactPackage())        .setUseDeveloperSupport(BuildConfig.DEBUG)        .setInitialLifecycleState(LifecycleState.RESUMED)        .build();

Step 4

为了方便使用,一般建议把这个NativeModule封装成一个JS Module。

我们建一个UserCenterAndroid的JS Module(其实就是UserCenterAndroid.js 喽)。

import { NativeModules } from 'react-native';module.exports = NativeModules.UserCenterAndroid;

Step 5

现在可以在JS代码中轻易的使用这个JS Module(对用的实现就是自定义Native Module)了。

import UserCenterAndroid from './UserCenterAndroid';var hasUserLogin = UserCenterAndroid.hasUserLogin();

到此,Android中成功添加自定义Native Module。

更多相关文章

  1. android 指定打包资源文件的方法
  2. Android(安卓)Parcel学习
  3. Android(安卓)Espresso
  4. Android(安卓)RadioGroup设置单选效果
  5. Android(安卓)Studio 触摸屏事件
  6. 通过aidl service调用activity
  7. arcgis for android 学习 - (4) 了解mapView的一些方法和事件
  8. android apk 应用 重新签名 方法
  9. 四、android studio使用自己库编译工程

随机推荐

  1. 虚拟化 VMware ESXi(二)
  2. 虚拟化 KVM
  3. msqly
  4. 虚拟化 VMware ESXi(一)
  5. NoSQL MongoDB
  6. 谷歌发布Skaffold,简化Kubernetes应用程序
  7. TIMESTAMP with implicit DEFAULT value
  8. 代码管理平台SVN
  9. 基于内阻增加和容量衰减双重标定的锂电池
  10. 代码管理平台GIT