zoukankan      html  css  js  c++  java
  • ios 播放音频 实现长时间后台运行(流氓)

    对于ios7,苹果支持几种后台运行模式,backgroundTask,voip,后台播放音乐等,具体看官方文档就好。

    我这边需要在后台跑一个长时间运行的计时器,所以就不能让app进入suspend状态。

    很早以前听说可以通过后台播放音乐来实现,借鉴了一下,测试好几天,找出来了一个还比较靠谱的方案:

    首先在

    - (void)applicationDidEnterBackground:(UIApplication *)application{

    }

    里面申请backgroundTask

    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]

    实现一个可以运行几分钟的权限。

    然后写一个计时器实时检测 backgroundTimeRemaining

    - (void)tik{

        if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 61.0) {

           [[CKAudioTool sharedInstance] playSound];

            [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];

        }

    }

     [[CKAudioTool sharedInstance] playSound];这段代码是去播放了一个无声的音乐,很关键的一点是

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]

    这样后台播放就不会影响到别的程序播放音乐了。

    我这个计时器每分钟运行一次tik函数,如果发现后台运行时间小于一分钟了,就再去申请一个backgroundTask。

    神奇的地方在于:backgroundTask不能在程序已经进入后台的时候申请,可以用一个播放音乐的假前台状态去申请,所以可以做到不断申请到权限,也就完成了长时间后台执行。

    应用实例“同学闹钟”。(这都能通过苹果审核???)

  • 相关阅读:
    【JZOJ5093】【GDSOI2017第四轮模拟day3】字符串匹配 哈希
    【JZOJ5094】【GDSOI2017第四轮模拟day3】鸽子 计算几何+floyd
    2017.4省选集训最终总结
    基于Idea从零搭建一个最简单的vue项目
    npm的镜像替换成淘宝
    maven settings.xml--需要保存到用户/.m2文件夹下
    @Controller @RestController
    SQL SERVER 查询所有数据表名称和数据行数
    linux 常用命令集锦
    java 数字左补齐0
  • 原文地址:https://www.cnblogs.com/lvyinbentengzhe/p/4168900.html
Copyright © 2011-2022 走看看