react-native 调用原生方法

第一步,新建MyReactPackage.java:

package com.goodthingshappeneverday;
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;

/**
 * Created by Administrator on 2016/10/18.
 */

public class MyReactPackage extends MainActivity implements ReactPackage {


    @Override
    public List createNativeModules(ReactApplicationContext reactContext) {

        List modules=new ArrayList<>();
        //将我们创建的类添加进原生模块列表中
        modules.add( new MyNativeModule(reactContext) );
        return modules;
    }

    public Listextends JavaScriptModule>> createJSModules() {

        //返回值需要修改
        return Collections.emptyList();
    }
    @Override
    public List createViewManagers(ReactApplicationContext reactContext) {

        //返回值需要修改
        return Collections.emptyList();
    }
}
 
  
 
  
 
  
 
  
 
  
第二步:新建MyNativeModule.java:
 
  
package com.goodthingshappeneverday;

import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.widget.Toast;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by Administrator on 2016/10/18.
 */
public class MyNativeModule extends ReactContextBaseJavaModule {
    private Context mContext;
    PowerManager pm;
    PowerManager.WakeLock wakeLock;
    public MyNativeModule(ReactApplicationContext reactContext) {
        super(reactContext);
        mContext = reactContext;
    }
    @Override
    public String getName() {

        //返回的这个名字是必须的,在rn代码中需要这个名字来调用该类的方法。
        return "MyNativeModule";
    }
    //函数不能有返回值,因为被调用的原生代码是异步的,原生代码执行结束之后只能通过回调函数或者发送信息给rn那边。
    @ReactMethod
    public void rnCallNative(String msg){
        Toast.makeText(mContext,msg,Toast.LENGTH_SHORT).show();
    }
    @ReactMethod
    public void showTime(final String years, final String mource, final String day, final String houre, final String mm,final String ss) {
//        new MyUtils().showDialog(mContext);
//        new MyUtils().setNotifi(mContext,"2017","9","15","18","9","0");
//        Toast.makeText(mContext,"sda" ,Toast.LENGTH_SHORT).show();
         //下面的是调用的,直接复制,修改时间即可
        final DialogActivity da = new DialogActivity();
        Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    if (da.getNowTime()[0].equals(years) &&
                            da.getNowTime()[1].equals(mource) &&
                            da.getNowTime()[2].equals(day)&&
                            da.getNowTime()[3].equals(houre)&&
                            da.getNowTime()[4].equals(mm)&&
                            da.getNowTime()[5].equals("0")
                            ) {
                        //获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行
                        Intent intent = new Intent(mContext, DialogActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                        mContext.startActivity(intent);
                    }
                }
            }, 100, 1000);

    }
}
 
  
 
  
第三部:在MainApplication中 
new MyReactPackage();
 
  
 
  
 
  
第四部:在react-native中加入 
 
  
import {
  StyleSheet,
  Text,
  View,
  NativeModules,

} from 'react-native';
 
  
第五步:rn需要调用原生地方
调用 show Time,是自己定义的方法:NativeModules.MyNativeModule.showTime( year,months,day,hour,mm,ss);
 
  
 
  

你可能感兴趣的:(react-native 调用原生方法)