克服锁屏+静音模式播放音频

Posted

技术标签:

【中文标题】克服锁屏+静音模式播放音频【英文标题】:Overcome locked screen + silent mode to play audio 【发布时间】:2013-03-20 11:44:55 【问题描述】:

This video是一个app的录音,可以

覆盖静音模式 覆盖锁定屏幕 播放闹钟音乐/旋律

我们的团队正在开发一个类似的定制 iphone 闹钟

如果有人能提供帮助,我将不胜感激。我已经试图打破这个两周了。

当设备被锁定时,我们下面的方法不会被调用。这就是为什么没有播放警报声的原因

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

    
    if ([GlobalData gSettings].vibration) 
        timer = [NSTimer scheduledTimerWithTimeInterval:(1.0) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
        isVibration = YES;
     else 
        isVibration = NO;
    
    
    self.uinfo = notification.userInfo;
    
    
    
    NSString *soundname = [uinfo objectForKey:@"sound"];
    NSURL *clip = [[NSBundle mainBundle] URLForResource:soundname withExtension:@"caf"];
    if (clip) 
        
        self.avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:clip error:NULL];
        self.avPlayer.delegate = self;
        AudiosessionInitialize (NULL, NULL, NULL, NULL);
        AudioSessionSetActive(true);
        
        // Allow playback even if Ring/Silent switch is on mute
        UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
        AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                                 sizeof(sessionCategory),&sessionCategory);
    
    else
    
        
        NSURL *clip = [[NSUserDefaults standardUserDefaults]URLForKey:[uinfo objectForKey:@"sound"]];
        self.avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:clip error:NULL];
        self.avPlayer.delegate = self;
        AudioSessionInitialize (NULL, NULL, NULL, NULL);
        AudioSessionSetActive(true);
        
        // Allow playback even if Ring/Silent switch is on mute
        UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
        AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                                 sizeof(sessionCategory),&sessionCategory);
    
    

    [self.avPlayer play];

【问题讨论】:

“如果有人能提供帮助,我将不胜感激。”什么?你有什么问题? 请看上面的补充 你检查过:***.com/a/14641433/843366 吗? AVAudioSessionCategoryPlayback 为我覆盖了静音模式,答案的另一部分应该可以帮助您锁定屏幕 好的,我会检查谢谢,伙计 我们已经实现了这一点,但在 iOS 6.1.3 中无法播放声音。音量控制似乎增加了,但在 iphone 解锁之前不会出现音频? 【参考方案1】:

我深入研究了 LivingEarth 应用程序。看来他们正在使用基于MMDeepSleepPreventer 的组件。他们使用某种内部警报系统(正在播放的音乐不是由本地通知触发的,而是可能由NSTimer触发)。

但是,我发现它在较新的 iOS 版本中不可靠,因此我对其进行了一些调整。启动时,它会继续播放静音音频文件,即使用户按下锁定按钮,应用程序也可以运行NSTimers

你可以找到我的叉子here。

【讨论】:

以上是关于克服锁屏+静音模式播放音频的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 如何覆盖静音模式并从后台播放音频

如何在 iPod 仍在播放音频时将 iOS 上的视频静音?

AVFoundation 添加音频输入使音频播放静音

HTML5 VIDEO 标签不播放音频/静音

播放音频时设置自定义元数据(控制中心、锁屏...)

在同时播放两个音频文件时启动其中一个静音