美文网首页react-native开发程序员
React Native跳转android原生界面

React Native跳转android原生界面

作者: FFF_Wang | 来源:发表于2017-07-20 16:07 被阅读88次

    在AndroidStudio

    创建IntentModule.java

    import android.app.Activity;
    import android.content.Intent;
    import android.widget.Toast;
    
    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();
                if(null!=currentActivity){
                    Class toActivity = Class.forName(name);
                    Intent intent = new Intent(currentActivity,toActivity);
                    intent.putExtra("params", params);
                    currentActivity.startActivity(intent);
                }
            }catch(Exception e){
                throw new JSApplicationIllegalArgumentException(
                        "不能打开Activity : "+e.getMessage());
            }
        }}
    
    

    创建MyReactPackage.java

    
    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<Class<? extends JavaScriptModule>> createJSModules() {
            return Collections.emptyList();
        }
    
        @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 IntentModule(reactContext));
    
            return modules;
        }
    }
    

    在MainApplication.java 添加 new MyReactPackage(),

    @Override
        protected List<ReactPackage> getPackages() {
          return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
                  new MyReactPackage(),
                new PickerViewPackage()
          );
        }
      };
    

    在RN项目中添加RNToAndroid.js

    'use strict';
    
    import { NativeModules } from 'react-native';
    
    export default NativeModules.IntentModule;
    

    在需要调用的地方添加。

    import RNToAndroid from '../RNToAndroid';
    
    <TouchableNativeFeedback
                            onPress={() => {
                                // ToastAndroid.show('Awesome', ToastAndroid.SHORT);
                                RNToAndroid.startActivityFromJS('com.navigatorapp.FirstActivity','js上传数据');
                            }
                            }>
                            <Text>4444444444444</Text>
                        </TouchableNativeFeedback>
    

    com.navigatorapp.FirstActivity 这个是你在安卓项目中需要添加的页面。这个你应该会写的。

    相关文章

      网友评论

        本文标题:React Native跳转android原生界面

        本文链接:https://www.haomeiwen.com/subject/ngfjkxtx.html