先统一一下,第一个是关于RN传递到安卓的:
})
(msg) => {
console.log('promise成功:'+msg);
}
).catch(
(err) => {
console.log(err);
}
);
俩种方式:一个是callback,一种是promise。可以看一下ES6的
----------------------------------------------------------------------------------------------------------------------------------
这个是android原生发送消息到RN
public static final String EVENT_NAME = "nativeCallRn";
/**
* Native调用RN 可任意时刻传递,Native主导控制 个人觉得此种方式缺点小
* @param msg
*/
public void nativeCallRn( String msg) {
this.getReactNativeHost().getReactInstanceManager().getCurrentReactContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(EVENT_NAME, msg);
}
其中RN端需要处理的方式:
//在组件中使用
componentWillMount() {
this.listener = DeviceEventEmitter.addListener('nativeCallRn', this.iseCallback.bind(this)); //对应了原生端的名字
}
componentWillUnmount() {
this.listener && this.listener.remove(); //记得remove哦
this.listener = null;
}
其中名称要对,标红的地方
------------------------------下面是安卓跳转到RN的---------------------------------------------------------------------
/**
* js页面跳转到activity 并传数据
*
* @param name
*/
@ReactMethod
public void startActivityByClassname(String name) {
try {
Activity currentActivity = getCurrentActivity();
if (null != currentActivity) {
Class aimActivity = Class.forName(name);
Intent intent = new Intent(currentActivity, aimActivity);
currentActivity.startActivity(intent);
currentActivity.finish();
}
} catch (Exception e) {
throw new JSApplicationIllegalArgumentException(
"无法打开activity页面: " + e.getMessage());
}
}
/**
* 从js跳转页面到原生的,并且传递数据
*
* @param name
* @param params
*/
@ReactMethod
public void startActivity(String name, String params) {
try {
Activity currentActivity = getCurrentActivity();
if (null != currentActivity) {
Class toActivity = Class.forName(name);
Intent intent = new Intent(currentActivity, toActivity);
intent.putExtra("params", params);
currentActivity.startActivity(intent);
currentActivity.finish();
}
} catch (Exception e) {
throw new JSApplicationIllegalArgumentException(
"不能打开Activity : " + e.getMessage());
}
}
/**
* Activtiy跳转到JS页面,传输数据
*
* @param successBack
* @param errorBack
*/
@ReactMethod
public void dataToJS(Callback successBack, Callback errorBack) {
try {
Activity currentActivity = getCurrentActivity();
String result = currentActivity.getIntent().getStringExtra("data");
if (TextUtils.isEmpty(result)) {
result = "没有数据";
}
successBack.invoke(result);
} catch (Exception e) {
errorBack.invoke(e.getMessage());
}
}
然后正确的姿势可以看一下我demo,放在github上面了,有意向的上去下载记得来颗星星。。。。