ios监听app音量的变化

方法1:
     在applicationDidFinishLaunching函数里添加
      [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(volumeChanged:)
                                             name:@"AVSystemController_SystemVolumeDidChangeNotification"
                                             object:nil];

  - (void)volumeChanged:(NSNotification *)notification
{
    float volume =
    [[[notification userInfo]
      objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
     floatValue];
   
    DDLogVerbose(@"current volume = %f", volume);  
}

   弊端:当app进入后天后,依然会监听到volume的变化

2. 对 AudioSession 添加volume变化的 listener, 可以放在startAudioSession函数里
    //add a listener for Outputvolume
    AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume ,
                                    volumeListenerCallback,
                                    self
                                    );


void volumeListenerCallback (
                             void                      *inClientData,
                             AudioSessionPropertyID    inID,
                             UInt32                    inDataSize,
                             const void                *inData
                             ){
    const float *volumePointer = inData;
    float volume = *volumePointer;
    NSLog(@"volumeListenerCallback %f", volume);
}

3. 获取当前的volume
     float volume = 0.0;
    UInt32 dataSize = sizeof(float);
    OSStatus status = AudioSessionGetProperty (kAudioSessionProperty_CurrentHardwareOutputVolume,
                             &dataSize,
                             &volume);
### 如何在 UniApp 中实现监听系统音量变化 对于希望在 UniApp 应用程序中监听系统音量变化的需求,可以通过特定平台的 API 或者第三方插件来达成目标。 #### iOS 平台下的实现方法 iOS 下可以利用 `NotificationCenter` 来订阅音量改变的通知。这允许开发者捕捉到当用户调整设备音量时触发的变化通知,并执行相应的逻辑处理[^1]。 ```javascript export default { mounted() { plus.ios.importClass('NSNotificationCenter').defaultCenter().addObserver( this, 'onVolumnChanged', 'AVSystemController_SystemVolumeDidChangeNotification', null ); }, methods: { onVolumnChanged(notification) { console.log('音量已更改', notification); // 执行其他操作... } }, beforeDestroy() { plus.ios.importClass('NSNotificationCenter').defaultCenter().removeObserver(this); } } ``` 这段代码展示了如何注册一个观察者用于接收来自系统的音量变动消息,在接收到此类消息之后调用指定的方法来进行进一步的操作。需要注意的是,在组件销毁前应当移除该观察者以防止内存泄漏等问题的发生。 #### Android 平台下的实现方案 针对 Android 设备,则存在多种途径去捕获音量键按下或是整体音量水平发生变更的情况。其中较为简便的一种做法就是借助于 uni-app 的广播机制配合专门为此目的设计好的插件——Ba-Broadcast 插件能够帮助应用监听包括但不限于屏幕状态切换、声音调节在内的多项系统级事件[^4]。 安装此插件后,便可通过其提供的接口轻松设置回调函数响应音量增减动作: ```javascript import baBroadcast from '@/plugins/ba-broadcast.js'; // 初始化插件实例 const broadcast = new baBroadcast(); broadcast.on('android.media.VOLUME_CHANGED_ACTION', (data) => { const volumeChangeInfo = JSON.parse(data); console.log(`当前音量等级为 ${volumeChangeInfo.volume}`); }); ``` 上述片段说明了怎样运用 Ba-Broadcast 实现跨平台一致性的音量监控功能,它不仅简化了开发流程而且提高了代码复用率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值