首页 > 编程问答 >在两个 Ionic 应用程序之间发送和接收广播接收器

在两个 Ionic 应用程序之间发送和接收广播接收器

时间:2024-06-12 13:51:54浏览次数:19  
标签:ionic-framework ionic4 ionic-native ionic5

我有三个 Ionic 5 应用。如果我打开第一个应用程序,而另外两个应用程序中的任何一个正在后台运行,那么我需要发送一些数据,但前提是第二个应用程序必须在后台运行。

我目前正在尝试使用 Cordova Broadcaster 插件( https://github.com/bsorrentino/cordova-broadcaster )。虽然我已成功调用了第一个应用程序的发送功能,但我遇到了第二个应用程序无法接收广播的问题。

发送应用程序代码(点击按钮时调用):-

import { Broadcaster } from '@awesome-cordova-plugins/broadcaster/ngx';

构造函数( private broadcaster :Broadcaster){}

sendFunction(){
      让 options1 = {"sample":"data"};

      if (this.platform.is('android') && this.platform.is('capacitor')){
        var isGlobal = true
        this.broadcaster.fireNativeEvent("SOR_APPS_TOKEN", isGlobal, options1).then(res => {
          console.log("event fired!");
        })
      }
}

接收器应用程序

Receiver 应用程序代码 :-

import { Broadcaster } from '@awesome-cordova-plugins/broadcaster/ngx';

构造函数( private broadcaster :Broadcaster){}

onInit(){
    if (this.platform.is('android') && this.platform.is('capacitor')){

    console.log( "register didShow received!" );

    let listener = function( e ) {
      console.log( "SOR_APPS_TOKEN received! userInfo: " + JSON.stringify(e) );
    }

    this.broadcaster.addEventListener( "SOR_APPS_TOKEN").subscribe( listener );
    }
}

在 Manifif 中,您将看到

而在 Manifest 文件中,我添加了(用于接收广播的应用程序):-

<receiver android:name="SOR_APPS_TOKEN" >;
    <intent-filter>;
        <action android:name="com.example.app1" >;
        </action>;
    </intent-filter>;

P.S. 如果您能在 GitHub 上找到任何示例应用程序来说明此功能,我们将不胜感激。

update :-

以下是我尝试过的其他选项的链接(也无法正常工作):-

https://github.com/bsorrentino/cordova-broadcaster/issues/72


好的,我理解想在三个 Ionic 5 应用程序之间使用 Cordova Broadcaster 插件发送数据,但遇到了问题。以下是一些建议和代码示例,可以帮助解决此问题:

问题分析

  • 清单文件配置 : 提供的清单文件配置似乎不正确。 android:name 属性应该指向一个广播接收器类,而不是一个字符串 "SOR_APPS_TOKEN"。
  • 广播接收器实现 : 需要在接收器应用程序中创建一个广播接收器类,并在其中处理接收到的广播。
  • 应用程序包名 : 确保在发送和接收应用程序中使用相同的广播事件名称 (SOR_APPS_TOKEN)。

解决方案

  1. 创建广播接收器类

在的接收器应用程序中,创建一个新的类来处理广播:

package com.yourpackage.name; // 替换为的应用程序包名

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class DataReceiver extends BroadcastReceiver {

    private static final String TAG = "DataReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Received broadcast intent: " + intent.getAction());

        if (intent.getAction().equals("SOR_APPS_TOKEN")) {
            String data = intent.getStringExtra("sample");
            Log.d(TAG, "Received data: " + data);

            // 在这里处理接收到的数据
        }
    }
}
  1. 注册广播接收器

在接收器应用程序的 AndroidManifest.xml 文件中注册广播接收器:

<manifest ...>
  <application ...>
    ...
    <receiver android:name=".DataReceiver">
      <intent-filter>
        <action android:name="SOR_APPS_TOKEN" />
      </intent-filter>
    </receiver>
  </application>
</manifest>
  1. 发送广播

发送应用程序的代码看起来不错,但请确保使用正确的广播事件名称 "SOR_APPS_TOKEN"。

  1. 权限

在发送和接收应用程序的 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

其他建议

  • 调试 : 使用 adb logcat 命令查看发送和接收应用程序的日志,以帮助调试问题。
  • 替代方案 : 考虑使用其他跨平台通信机制,例如:
    • 本地存储 : 使用插件(例如 @ionic-native/native-storage )在应用程序之间共享数据。
    • 后台服务 : 使用后台服务来维护连接并交换数据。
    • 推送通知 : 使用推送通知服务(例如 Firebase Cloud Messaging)向其他应用程序发送信号。

希望以上信息能够帮助解决问题。如果还有其他疑问,请随时提出!

标签:ionic-framework,ionic4,ionic-native,ionic5
From: 78542859

相关文章