• react-native 调用原生方法


    基于RN0.40。

    1. MyNativeModule.java

    package com.www;  //路径名字
     
    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;
    
    public class MyNativeModule extends ReactContextBaseJavaModule {
     
      public static final String REACTCLASSNAME = "MyNativeModule";
      private Context mContext;
     
      public MyNativeModule(ReactApplicationContext reactContext) {
        super(reactContext);
        mContext = reactContext;
      }
     
      @Override
      public String getName() {
        return REACTCLASSNAME;
      }
     
      /**
       * 必须添加反射注解不然会报错
       * 这个方法就是ReactNative将要调用的方法,会通过此类名字调用
       * @param msg
       */
      @ReactMethod
      public void callNativeMethod(String msg) {
        Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
      }
    }
    

      

    2. 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 MyNativeModule(reactContext));
        return modules;
      }
     
      @Override
      public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
      }
     
      @Override
      public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
      }
    }
    

      

    3. 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);
      }
    }
    

      

    4. 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>
        );
      }
     
      /**
       * 调用原生方法
       */
      onClick() {
        NativeModules.MyNativeModule.callNativeMethod('成功调用原生方法');
      }
    }
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
      },
      instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
      },
    });
     
    AppRegistry.registerComponent('www', () => www);
    

      

  • 相关阅读:
    PHP关于异常说明
    PHP关于微信授权
    python flask使用方法
    scrcpy启动方法
    ADB shell出现error:device offline提示
    使用Spring框架整合Java Mail
    基于Aspectj表达式配置的Spring AOP
    如何安装和使用Maven
    在Linux系统下安装nginx教程
    了解Maven的基本知识
  • 原文地址:https://www.cnblogs.com/shen076/p/6379962.html
Copyright © 2020-2023  润新知