React Native桥接Android模块-Activity
1.创建模块类
public class RNManagerModule extends ReactContextBaseJavaModule {
private Context mContext;
public RNManagerModule(ReactApplicationContext reactContext) {
super(reactContext);
mContext = reactContext;
}
@Override
public String getName() {
return "RNManagerModule";
}
//RN调用android Activity
@ReactMethod
public void RNActivity(){
Intent intent = new Intent(mContext,RnActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //一定要加上这句
mContext.startActivity(intent);
}
}
2.注册模块
public class RNPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules=new ArrayList<>();
//将我们创建的类添加进原生模块列表中
modules.add(new RNManagerModule(reactContext));
return modules;
}
}
3.Android包的注册
将RNPackage添加到 MainApplication.java 中的 getPackages() 方法中
4.RnActivity 代码 布局
public class RnActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rn);
}
public void onBack(View view) {
finish();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF1493"
android:orientation="vertical"
android:id="@+id/ll"
>
<Button
android:text="goBack"
android:onClick="onBack"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
js调用原生代码
import { NativeModules } from 'react-native';
<Button
title="跳转到Android Activity"
onPress={() => {
NativeModules.RNManagerModule.RNActivity();
}}
/>
RN调用Android需要module名和方法名相同,而Android调用RN只需要方法名相同。
(1)RCTDeviceEventEmitter 事件方式
优点:可任意时刻传递,Android主导控制。 可以用于多线程
(2)Callback 回调方式
优点:JS调用,Android返回。
缺点:CallBack为异步操作,返回时机不确定
(3)Promise
优点:JS调用,Android返回。
缺点:每次使用需要JS调用一次
(4)直传常量数据(原生向RN)
跨域传值,只能从原生端向RN端传递。RN端可通过 NativeModules.[module名].[参数名] 的方式获取。
注意:RN层调用NativeModule层进行界面跳转时,需要设置FLAG_ACTIVITY_NEW_TASK标志