react-native 呼叫原生模組詳解
阿新 • • 發佈:2019-01-27
一,繼承 ReactContextBaseJavaModule 實現如下方法 自定義方法用 @ReactMethod註釋 /** * 日誌列印module * Created by ybj on 2016/2/26. */ public class ReactLogModule extends ReactContextBaseJavaModule { private static final String MODULE_NAME="Log"; private static final String TAG_KEY = "TAG"; private static final String TAG_VALUE = "LogModule"; public ReactLogModule(ReactApplicationContext reactContext) { super(reactContext); } @Override public String getName() { return MODULE_NAME; } @ReactMethod public void d(String tag,String message){ Log.d(tag,message); /* WritableMap params = Arguments.createMap(); params.putString("TAG",tag); params.putString("MSG",message); getReactApplicationContext() .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit("logInConsole", params);//對應的javascript層的事件名為logInConsole,註冊該事件即可進行回撥*/} @Override public Map<String, Object> getConstants() { final Map<String,Object> constants= MapBuilder.newHashMap(); constants.put(TAG_KEY,TAG_VALUE); return constants; } }
二,繼承ReactPackage,實現如下
/** * 日誌列印 需要列印日誌註冊this * Created by ybj on 2016/2/26. */ public class ReactLogPackage implements ReactPackage { @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules=new ArrayList<NativeModule>(); ReactLogModule reactLogModule=new ReactLogModule(reactContext); modules.add(reactLogModule); return modules; } @Override public List<Class<? extends JavaScriptModule>> createJSModules() { return Collections.emptyList(); } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } }
三 新增package
mReactInstanceManager = ReactInstanceManager.builder() .setApplication(((Activity) mContext).getApplication()) .setJSBundleFile(bundleFile) // .setJSMainModuleName("test") .setNativeModuleCallExceptionHandler(new NativeModuleCallExceptionHandler() { @Override public void handleException(Exception e) { } }).addPackage(new MainReactPackage()) .addPackage(new ReactLogPackage()) .setUseDeveloperSupport(false) .setInitialLifecycleState(LifecycleState.RESUMED) .build(); mReactRootView.startReactApplication(mReactInstanceManager, "OperationActivity", null);