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);
}
}