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