1、起因
使用RN开发一款App的时候,需要使用到地图,但是RN中关于地图的组件都不太好用,先后试过了github里面的国产高德和百度,最后无奈都放弃了,只好考虑原生开发。使用原生开发绕不开的问题就是在RN中跳转到Android原生页面和在Android原生页面中跳转到RN页面。
2、RN跳转Android原生界面
在寻找方案的过程中,发现很多博文,在RN调用Android原生页面方面都简的比较清楚,即自定义IntentModule并添加到ReactPackage的List中。
关键代码如下:
一、自定义IntentModule,参考react-native中文网Android原生模块部分
自定义Java文件IntentModule.class
package com.xx.xx;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.widget.Toast;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import java.util.HashMap;
import java.util.Map;
public class IntentModule extends ReactContextBaseJavaModule {
private static final String DURATION_SHORT_KEY = "SHORT";
private static final String DURATION_LONG_KEY = "LONG";
public IntentModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "IntentModule";
}
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
return constants;
}
@ReactMethod
public void show(String message, int duration) {
Toast.makeText(getReactApplicationContext(), message, duration).show();
}
@ReactMethod
public void startActivityFromJS(String name, String params) {
try {
Activity currentActivity = getCurrentActivity();