我正在尝试通过广播插件将事件从javascript(具体来说是角度)发送到android:https://github.com/bsorrentino/cordova-broadcaster
在 UI 中,我用一些数据触发本机事件:
this.broadCaster
.fireNativeEvent("com.service.print", { extras: { item: "test data" } })
.then((result) => {
console.log("broadcast sent:" + result);
})
.catch((error) => {
console.log("Error sending broadcast:" + error);
});
在 Android 上,我在
AndroidManifest.xml
中注册了一个接收器:
<receiver android:name="io.ionic.starter.PrintReceiver">
<intent-filter>
<action android:name="com.service.print"></action>
</intent-filter>
</receiver>
并添加了
PrintReceiver
类来处理 broadcast
:
public class PrintReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String data = intent.getExtras().getString("data");
List<PrinterCommand> commands = new ArrayList<PrinterCommand>();
// Add commands to be sent
commands.add(
new PrinterCommand(PrinterCommand.CommandType.TEXT, "Normal row 1\n")
);
Gson gson = new Gson();
String json = gson.toJson(commands);
System.out.println("Sending print broadcast: " + json);
Intent printIntent = new Intent(MyPOSUtil.PRINT_BROADCAST);
// Add the commands
printIntent.putExtra("commands", json);
// Send broadcast
LocalBroadcastManager.getInstance(context).sendBroadcastSync(printIntent);
}
}
当我尝试在 Android 设备上运行该应用程序时,我收到此错误:
2020-07-31 10:31:34.007 11308-11416/io.ionic.starter V/Capacitor/Plugin: To native (Cordova plugin): callbackId: broadcaster343151718, service: broadcaster, action: fireNativeEvent, actionArgs: ["com.service.print",{"extras":{"item":"test data"}},false]
2020-07-31 10:31:34.022 11308-11433/io.ionic.starter V/CDVBroadcaster: sendBroadcast isGlobal=false
2020-07-31 10:31:34.051 11308-11308/io.ionic.starter I/Capacitor/Console: File: http://localhost/auth-auth-module-es2015.js - Line 70 - Msg: Error sending broadcast:OK
注意:我尝试使用相同的插件从 Android 接收广播并且它有效。
这里可能出现什么问题。
好吧,最终我发现 brodcaster 插件没有任何问题,而且它实际上发送了正确的广播。
我了解到,从 Android 8 开始,您无法在 Manifest.xml 中注册接收器,但可以使用基于上下文的注册。
@justLearning 您能否提供 Angular Capacitor 的任何插件来将扫描广播到 Android。