package com.example.song.reactnativeappdemo.communication; import android.content.Intent; import android.net.Uri; import android.util.Log; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.modules.core.DeviceEventManagerModule; /** * 通信Module类 * Created by Song on 2017/2/17. */ public class CommModule extends ReactContextBaseJavaModule { private ReactApplicationContext mContext; public static final String MODULE_NAME = "commModule"; public static final String EVENT_NAME = "nativeCallRn"; public static final String EVENT_NAME1 = "getPatchImgs"; /** * 构造方法必须实现 * @param reactContext */ public CommModule(ReactApplicationContext reactContext) { super(reactContext); this.mContext = reactContext; } /** * 在rn代码里面是需要这个名字来调用该类的方法 * @return */ @Override public String getName() { return MODULE_NAME; } /** * RN调用Native的方法 * @param phone */ @ReactMethod public void rnCallNative(String phone) { // 跳转到打电话界面 Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + phone)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 跳转需要添加flag, 否则报错 mContext.startActivity(intent); } /** * Native调用RN * @param msg */ public void nativeCallRn(String msg) { mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit(EVENT_NAME,msg); } /** * Callback 方式 * rn调用Native,并获取返回值 * @param msg * @param callback */ @ReactMethod public void rnCallNativeFromCallback(String msg, Callback callback) { // 1.处理业务逻辑... String result = "处理结果:" + msg; // 2.回调RN,即将处理结果返回给RN callback.invoke(result); } /** * Promise * @param msg * @param promise */ @ReactMethod public void rnCallNativeFromPromise(String msg, Promise promise) { Log.e("---","adasdasda"); // 1.处理业务逻辑... String result = "处理结果:" + msg; // 2.回调RN,即将处理结果返回给RN promise.resolve(result); } }