当前位置:首页 > uni-app

uniapp 接收广播

2026-03-05 00:29:45uni-app

接收广播的实现方法

在UniApp中接收广播主要依赖于原生平台的能力,可以通过以下方式实现:

Android平台实现

在Android原生平台中,需要注册广播接收器并处理接收到的广播:

  1. 创建原生插件或修改原生代码 在Android原生工程中创建BroadcastReceiver子类:

    public class MyBroadcastReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
         String action = intent.getAction();
         if ("YOUR_ACTION".equals(action)) {
             // 处理接收到的广播
             String data = intent.getStringExtra("data");
             // 通过UniApp SDK传递到前端
             UniSDKEngine.sendUniModuleEvent("BroadcastEvent", data);
         }
     }
    }
  2. 在AndroidManifest.xml中注册接收器

    <receiver android:name=".MyBroadcastReceiver">
     <intent-filter>
         <action android:name="YOUR_ACTION" />
     </intent-filter>
    </receiver>

iOS平台实现

在iOS平台使用本地通知中心接收广播:

uniapp 接收广播

  1. 创建原生模块
    
    #import <Foundation/Foundation.h>

@interface MyNotificationObserver : NSObject @end

@implementation MyNotificationObserver

  • (instancetype)init { self = [super init]; if (self) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:@"YOUR_NOTIFICATION" object:nil]; } return self; }

    uniapp 接收广播

  • (void)didReceiveNotification:(NSNotification )notification { NSDictionary userInfo = notification.userInfo; // 通过DCUniMP SDK传递到前端 [DCUniMPSDKEngine sendEventToUniMP:@"BroadcastEvent" data:userInfo]; }

@end


#### UniApp前端接收

在前端页面中监听原生事件:

```javascript
// 页面中监听事件
uni.onNativeEventReceive((res) => {
    if (res.event === 'BroadcastEvent') {
        console.log('收到广播:', res.data);
        // 处理接收到的数据
    }
});

// 或者使用全局事件监听
uni.$on('BroadcastEvent', (data) => {
    console.log('全局收到广播:', data);
});

动态注册广播(仅Android)

对于需要动态注册的广播,可在页面生命周期中处理:

// 页面显示时注册
onShow() {
    if (plus.os.name === 'Android') {
        const main = plus.android.runtimeMainActivity();
        const IntentFilter = plus.android.importClass('android.content.IntentFilter');
        const filter = new IntentFilter('YOUR_ACTION');

        this.broadcastReceiver = plus.android.implements('android.content.BroadcastReceiver', {
            onReceive: (context, intent) => {
                const data = plus.android.invoke(intent, 'getStringExtra', 'data');
                uni.$emit('BroadcastEvent', data);
            }
        });

        main.registerReceiver(this.broadcastReceiver, filter);
    }
}

// 页面隐藏时注销
onHide() {
    if (this.broadcastReceiver && plus.os.name === 'Android') {
        const main = plus.android.runtimeMainActivity();
        main.unregisterReceiver(this.broadcastReceiver);
    }
}

注意事项

  • Android广播分为静态注册和动态注册,静态注册在应用未启动时也能接收,动态注册只在应用运行时有效
  • iOS没有真正的广播机制,主要通过NSNotificationCenter实现类似功能
  • 跨平台实现时需考虑各平台的特性差异
  • 频繁的广播通信可能影响性能,建议合理设计通信频率和数据量

以上方法可根据具体业务需求进行调整,实现UniApp中接收广播的功能。

标签: uniapp
分享给朋友:

相关文章

uniapp 编辑

uniapp 编辑

uniapp 编辑功能实现方法 在uniapp中实现编辑功能通常涉及表单处理、数据绑定和状态管理。以下为常见实现方式: 表单数据双向绑定 使用v-model指令实现表单元素与数据的双向绑定: &l…

uniapp广播

uniapp广播

全局事件通信 在UniApp中实现广播功能可通过全局事件机制完成,适用于跨页面或组件通信。使用uni.$emit、uni.$on、uni.$off等方法实现事件的触发、监听与移除。 发送广播(触发事…

uniapp 摇杆

uniapp 摇杆

uniapp 实现虚拟摇杆的方法 在uniapp中实现虚拟摇杆功能,通常需要结合canvas绘制和触摸事件监听。以下是具体实现方案: 基础摇杆实现 创建canvas画布 在template中添加c…

美颜uniapp

美颜uniapp

美颜功能在UniApp中的实现方法 在UniApp中实现美颜功能,可以通过以下几种方式: 使用第三方SDK或插件 腾讯云美颜SDK:提供直播推流场景下的美颜、滤镜、贴纸等功能,支持UniApp…

uniapp关闭广告

uniapp关闭广告

关闭广告的方法 在UniApp中关闭广告通常涉及以下几个方法,具体操作取决于广告的类型和集成方式。 移除广告模块 检查项目中是否集成了广告SDK或相关组件,如ad、ad-draw等。在pages.j…

uniapp前端渲染

uniapp前端渲染

uniapp前端渲染的基本原理 uniapp基于Vue.js框架,采用了一套代码多端运行的机制。前端渲染主要通过Vue的虚拟DOM技术实现,在不同平台(H5、小程序、App等)上会编译为对应平台的渲染…