JS與Native(Android)通信:
/**
* Created by 80028939 on 1/10/2018.
*/
public class MainModule extends ReactContextBaseJavaModule {
private final String MODULE_NAME = "mainModule";
private ReactContext mContext;
private String eventName = "nativeCallRn";
private int type;
private String appId;
private String appName;
public MainModule(ReactApplicationContext reactContext) {
super(reactContext);
mContext = reactContext;
}
@Override
public String getName() {
return MODULE_NAME;
}
/**
* Native調用RN
*
* @param msg
*/
public void nativeCallRn(String msg) {
mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, msg);
}
/**
* DeviceEventEmitter方法傳送參數
*/
@ReactMethod
public void sendMsgToRN() {
Log.e("---", "sendMsgToRN");
nativeCallRn("hello");
}
/**
* native頁面跳轉到rn 並傳數據
*/
@ReactMethod
public void getDataFromIntent(Callback successBack, Callback errorBack) {
try {
Activity currentActivity = getCurrentActivity();
type = currentActivity.getIntent().getIntExtra("urlType", 3);
appId = currentActivity.getIntent().getStringExtra("appID");
appName = currentActivity.getIntent().getStringExtra("title");
successBack.invoke("InfoDetail");
} catch (Exception e) {
errorBack.invoke(e.getMessage());
}
}
/**
* CallBack 方法
*
* @param callback:處理方法
*/
@ReactMethod
public void rnCallNativeCallback(Callback callback) {
MySession mySession = new MySession(mContext);
String session = mySession.getKeySession();
String badge = mySession.getKeyBadge();
JSONObject object = new JSONObject();
try {
object.put("session", session);
object.put("userBadge", badge);
object.put("appId", appId);
object.put("type", type);
object.put("appName", appName);
object.put("imgUrl", "null");
} catch (JSONException e) {
e.printStackTrace();
}
callback.invoke(object.toString());
}
/**
* 實現跳轉界面
*/
@ReactMethod
public void rnCallbackNative() {
/* Intent intent = new Intent(mContext, NotificationActivity.class);
mContext.startActivity(intent);*/
getCurrentActivity().finish();
}
/**
* 調用數據傳參
*
* @param callback
*/
@ReactMethod
public void rnCallbackIsflag(Callback callback) {
callback.invoke("detail");
}
/**
* Promise 方式
*
* @param msg:傳送參數
* @param promise:Promise對象
*/
@ReactMethod
public void rnCallNativeFromPromise(String msg, Promise promise) {
String result = "處理結果:" + msg;
Toast.makeText(mContext, "Result===" + result, Toast.LENGTH_SHORT).show();
JSONObject object = new JSONObject();
try {
object.put("session", "null");
object.put("userBadge", new MySession(mContext).getKeyBadge());
object.put("appId", appId);
object.put("type", type);
} catch (JSONException e) {
e.printStackTrace();
}
// 2.回調RN,即將處理結果返回給RN
promise.resolve(object.toString());
}
}