1. 程式人生 > >react-native 呼叫原生模組詳解

react-native 呼叫原生模組詳解


一,繼承 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);