Ionic Android 广播事件从 javascript 到本机

问题描述 投票:0回答:2

我正在尝试通过广播插件将事件从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 接收广播并且它有效。

这里可能出现什么问题。

broadcastreceiver ionic4
2个回答
1
投票

好吧,最终我发现 brodcaster 插件没有任何问题,而且它实际上发送了正确的广播。

我了解到,从 Android 8 开始,您无法在 Manifest.xml 中注册接收器,但可以使用基于上下文的注册。

Android 8+ 清单注册限制


0
投票

@justLearning 您能否提供 Angular Capacitor 的任何插件来将扫描广播到 Android。

© www.soinside.com 2019 - 2024. All rights reserved.