简体   繁体   English

如何在 react-native 中使用原生模块

[英]How to use native modules in react-native

i'm trying to use native modules to send sms in react-native, i found a tutorial online that i replicated, but it does not work for me, i don't get any particular error, it just isn't working.我正在尝试使用本机模块在 react-native 中发送短信,我在网上找到了一个我复制的教程,但它对我不起作用,我没有收到任何特定错误,它只是不起作用。

DirectSmsModule.java DirectSmsModule.java

package com.send;
 
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.uimanager.IllegalViewOperationException;
import android.telephony.SmsManager;  //++ make sure this package is available always
public class DirectSmsModule extends ReactContextBaseJavaModule {
 
    public DirectSmsModule(ReactApplicationContext reactContext) {
        super(reactContext); //required by React Native
    }
 
    @Override
    //getName is required to define the name of the module represented in JavaScript
    public String getName() { 
        return "DirectSms";
    }
 
    @ReactMethod
    public void sendDirectSms(String phoneNumber, String msg) {
        try {      
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(phoneNumber, null, msg, null, null);    
            System.out.println("message sent successfully.");
        } catch (Exception ex) {
            System.out.println("couldn't send message.");
        } 
    }
}

DirectSmsPackage.java DirectSmsPackage.java

package com.send;
 
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.send.DirectSmsModule; // enoxscanner should be replaced with your own package name
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class DirectSmsPackage implements ReactPackage {
 
    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
 
    @Override
    public List<NativeModule> createNativeModules(
            ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        //this is where you register the module
        modules.add(new DirectSmsModule(reactContext));
        return modules;
    }
}

I added these in my MainApplication.java我在 MainApplication.java 中添加了这些

import com.textngsimhosting.DirectSmsPackage; 
packages.add(new DirectSmsPackage());

My App.js我的 App.js

const DirectSms = NativeModules.DirectSms
DirectSms.sendDirectSms('0701**8741', 'yhhhhhh') 

Please help, i don't get any errors at all.请帮忙,我根本没有收到任何错误。 I'm guessing System.out.println("couldn't send message.");我猜System.out.println("couldn't send message."); in DirectSmsModule.java should print in metro console, it doesn't在 DirectSmsModule.java 中应该在地铁控制台中打印,它不会

意识到它不适用于高于 23 (Android 6.0) 的 API 级别

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM