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);
}
}
浙公网安备 33010602011771号