美文网首页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