我正在开发本机应用程序。我正在尝试从本机代码向我的本机代码发出事件。这可以在Android上使用,但在iOS上很挣扎。
我正在成功侦听从本机Android代码发送的事件。但是,当在iOS上运行时,我的react native应用并没有“挑剔”相同的事件,并试图找出原因。
我有连接到MQTT代理的代码。该代码是为iOS和Android本机编写的。在连接过程中,我会将连接状态从本机代码发送到react-native。这在Android上运行良好。使用reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName,eventString)方法从我的Android代码发送的事件达到了我的React本机代码。但是,在我的iOS代码中,正在发送使用sendEvent()方法传输的消息,但是我没有在我的本机代码中接收它们。我什至在我的iOS模拟器中收到一条黄色警告,指出“发送Status
,但未注册任何侦听器。我发送事件的Swift类扩展了RCTEventEmitter类。
希望这是人们需要帮助的所有细节。我对DeviceEventEmitter的使用经验不足,而对Swift和iOS的经验则很少。主要是Android人,所以这有点令人困惑。我猜它实际上超级简单,但我有点迷茫。
this.handleMqttStatusChange = this.handleMqttStatusChange.bind(this);
DeviceEventEmitter.addListener("Status", this.handleMqttStatusChange);
以下Swift代码发送事件。
self.sendEvent(withName: "Status", body: ["status":"Connecting"]);
发送事件的Swift类扩展了RCTEventEmitter。
class AwsIotModule: RCTEventEmitter {
我的Android Java文件扩展了ReactContextBaseJavaModule。
public class AwsIotModule extends ReactContextBaseJavaModule {
下面的java方法用于发送事件。
private void sendEvent(ReactContext reactContext,
String eventName,
@Nullable WritableMap params) {
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
答案 0 :(得分:1)
好吧,我知道了。我继续在我的本机代码中使用NativeEventEmitter而不是DeviceEmitter。现在,事件由本机在Android和iOS上捕获。