首页 > 解决方案 > 如何在 react-native 中使用原生模块

问题描述

我正在尝试使用本机模块在 react-native 中发送短信,我在网上找到了我复制的教程,但它对我不起作用,我没有收到任何特定错误,它只是不起作用。

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

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;
    }
}

我在我的 MainApplication.java 中添加了这些

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

我的 App.js

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

请帮忙,我根本没有任何错误。我猜System.out.println("couldn't send message.");DirectSmsModule.java 应该在地铁控制台中打印,它没有

标签: javascriptjavareact-native

解决方案


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


推荐阅读