我有三个 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)。
解决方案
- 创建广播接收器类
在的接收器应用程序中,创建一个新的类来处理广播:
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);
// 在这里处理接收到的数据
}
}
}
- 注册广播接收器
在接收器应用程序的
AndroidManifest.xml
文件中注册广播接收器:
<manifest ...>
<application ...>
...
<receiver android:name=".DataReceiver">
<intent-filter>
<action android:name="SOR_APPS_TOKEN" />
</intent-filter>
</receiver>
</application>
</manifest>
- 发送广播
发送应用程序的代码看起来不错,但请确保使用正确的广播事件名称 "SOR_APPS_TOKEN"。
- 权限
在发送和接收应用程序的
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