react-native 调用原生Activity页面
1. index.android.js
import React, {Component} from 'react'; import { AppRegistry, StyleSheet, Text, View, NativeModules, } from 'react-native'; class www extends Component { render() { return ( <View style={styles.container}> <Text style={styles.instructions} onPress={() => this.onClick()}> 点我 </Text> </View> ); } /** * 调用原生页面 * ControlPCActivity是你想跳转到的页面 */ onClick() { NativeModules.MyMapIntentModule.startActivityByClassname('com.www.ControlPCActivity') } } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', }, instructions: { textAlign: 'center', color: '#333333', marginBottom: 5, }, }); AppRegistry.registerComponent('www', () => www);
2. MyMapIntentModule.java
package com.www; import android.app.Activity; import android.content.Intent; import android.text.TextUtils; import android.content.Context; import android.widget.Toast; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.JSApplicationIllegalArgumentException; public class MyMapIntentModule extends ReactContextBaseJavaModule { public static final String REACTCLASSNAME = "MyMapIntentModule"; private Context mContext; public MyMapIntentModule(ReactApplicationContext reactContext) { super(reactContext); mContext = reactContext; } @Override public String getName() { return REACTCLASSNAME; } /** * 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); } }catch(Exception e){ throw new JSApplicationIllegalArgumentException( "无法打开activity页面: "+e.getMessage()); } } }
3. MyReactPackage.java
package com.www; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MyReactPackage implements ReactPackage { @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new MyMapIntentModule(reactContext)); return modules; } @Override public List<Class<? extends JavaScriptModule>> createJSModules() { return Collections.emptyList(); } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } }
4. MainApplication.java
package com.www; import android.app.Application; import android.util.Log; import com.facebook.react.ReactApplication; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; import com.facebook.soloader.SoLoader; import java.util.Arrays; import java.util.List; public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override protected boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new MyReactPackage() //只需添加这里 ); } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } @Override public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); } }