DeviceEventManagerModule

DeviceEventManagerModule

我一直在尝试编写一个模块,以便当电话取消调用时, native 可以调用Javascript方法。但是,当我运行react-native run-android命令时,compileDebugJavaWithJavac出现以下错误。

CallListenerModule.java:44 error: package DeviceEventManagerModule does not exist (DeviceEventManagerModule.RCTDeviceEventEmitter.class)

这是CallListenerModule类:
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;


import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.Arguments;

import android.util.Log;

public class CallListenerModule extends ReactContextBaseJavaModule {
    BroadcastReceiverCustom broadcastRecevier;

    ReactContext context;

    public CallListenerModule(ReactApplicationContext reactContext) {
        super(reactContext);
        context = reactContext;
        broadcastRecevier = new BroadcastReceiverCustom(reactContext);
    }

    @Override
        public String getName() {
        return "CallListenerModule";
    }

    public void sendCallEvent(String incomingNumber){
        WritableMap params = Arguments.createMap();
        params.putString("Number", incomingNumber);
        sendEvent(context, "CallRecevied", params);
    }


    private void sendEvent(ReactContext reactContext,
                        String eventName,
                        WritableMap params) {
        reactContext
            .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
            .emit(eventName, params);
    }
}

我已经在伟大的互联网上搜索了此问题的解决方案,但是没有运气。 sendEvent方法是从docs复制的。我从params参数中删除了@Nullable,因为它引起了另一个错误,并且我不打算在没有参数的情况下发送事件。

这是我关于SO的第一篇文章,因此任何 build 性的批评都值得赞赏:)

最佳答案

您忘记了导入com.facebook.react.modules.core.DeviceEventManagerModule类。因此,您可以通过添加以下行来解决您的问题:
import com.facebook.react.modules.core.DeviceEventManagerModule

10-01 02:32