当前位置:首页 > 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开发中,多环境配置能有效区分开发、测试、生产等不同环境的API地址、密钥等参数,避免手动修改代码导致的错误。 创建环境配置文件 在项目根目录下创建env.js或co…

uniapp实现标题栏渐变

uniapp实现标题栏渐变

实现标题栏渐变的方法 在UniApp中实现标题栏渐变效果,可以通过修改页面的导航栏样式或使用自定义导航栏来实现。以下是几种常见的方法: 方法一:使用原生导航栏渐变 通过修改pages.json中的…

uniapp 头条

uniapp 头条

uniapp 适配今日头条(字节跳动小程序)的方法 环境配置 确保HBuilderX版本在2.7.0以上,manifest.json中勾选"字节跳动小程序"平台。在开发者工具中配置正确的AppID和项…

uniapp 滑动

uniapp 滑动

uniapp 实现滑动效果的方法 在uniapp中实现滑动效果可以通过多种方式,包括使用内置组件、CSS动画或第三方插件。以下是几种常见的方法: 使用scroll-view组件 scroll-vi…

uniapp编译结果

uniapp编译结果

uniapp编译结果 uniapp的编译结果会根据目标平台不同而生成不同的输出文件。以下是主要平台的编译结果说明: H5平台 编译后会生成一个/dist/build/h5目录,包含标准的HTML5应…

uniapp 审批流程

uniapp 审批流程

uniapp 审批流程实现方法 在uniapp中实现审批流程,通常需要结合前端页面设计和后端逻辑处理。以下是常见的实现方案: 页面设计与组件开发 审批流程通常需要展示流程图、审批记录和操作按钮。可以…