当前位置: 首页 > 知识库问答 >
问题:

在后台运行一个应用程序,播放一些音频和加速度计

都昊乾
2023-03-14

几天来我一直被困在一个点上。基本上,我正在开发一个应用程序,通过播放一些音频来引导用户(用户无法控制这些音频,没有播放/暂停),并且通过付费音频,它还使用加速度计来获取数据,根据这些数据以规则的间隔计算一些结果。意味着我正在播放一些音频,然后启动加速度计大约4次。
每件事情都按照预期工作,但是当应用程序进入后台时,应用程序保持活动一段时间,操作系统终止/终止应用程序。
基本上整个流程大约需要6到7分钟--至少意味着我的应用程序需要在后台活动模式至少7分钟。我看到了stackOverFlow问题,但没有成功。
用户启动时我正在使用什么

self.backgroundTaskID = UIApplication.shared.beginBackgroundTask (withName: "Finish Network Tasks") {
            // End the task if time expires.
            UIApplication.shared.endBackgroundTask(self.backgroundTaskID!)
            self.backgroundTaskID = UIBackgroundTaskIdentifier.invalid
            
        }
        
        self.startForFirsPhase()

当第一阶段超过I开始第二阶段和第三阶段后,前一阶段结束

  • 我已在info.plist
  • 中添加了 必需的后台模式 签名和功能中的 后台进程音频、AirePlay和画中画

播放音频的代码是blow

func play(name: String, volumeLevel: Float? = 1) {
    //        print("NameForAudio: ", name)
        guard let path = Bundle.main.path(forResource: name, ofType: nil) else {
            print("can not find path")
            return
        }
        let url = URL(fileURLWithPath: path)
        do {
            try AVAudioSession.sharedInstance().setCategory(.playback)
            self.audioPlayer = try AVAudioPlayer(contentsOf: url)
            self.audioPlayer.volume = volumeLevel ?? 1
            self.audioPlayer!.prepareToPlay()
            self.audioPlayer!.play()
        } catch {
            print("some thing went wrong Name: \(error)")
        }
}

所有的音频都喜欢加速度计,我使用DispatchQueue.Main.AsyncAfter(deadline:.now()+durationOfPreviousAudio)一个接一个地播放一些音频

共有1个答案

燕和裕
2023-03-14

为此您不需要(也不应该使用)BeginBackgroundTask。这是对系统的一个提示,即您正在开始一个短暂的任务,如果应用程序在任务结束前进入后台,将会获得一点额外的时间来完成任务。这用于将数据保存到文件系统或完成网络操作。

“后台进程”是一个完全不同的工具,用于长时间运行的实用程序进程,如优化数据库或运行学习算法。你不应该用它来做这个。

如果您正在播放背景音频,那么您必须使用背景音频模式。请参阅链接文档,了解如何配置该功能,以及如何控制背景音频。(您可能已经在Xcode中选中了正确的配置框,但您还需要确保配置并激活了与您的用例匹配的AVAudioSession。您可能需要.playback,也可能需要.mixwithothers)它一般需要持续的发挥。例如,你不能轻易地在将来的任意时间启动音频。

您可能还会从启用后台位置事件中受益。

iOS中没有通用的“后台运行”工具。有几个专门的工具用于解决特定的问题,您需要使用与您的用例匹配的工具。在iOS中,后台操作非常复杂,您需要阅读您使用的每个工具的文档,以了解如何配置它,以及它允许哪些操作和不允许哪些操作。

 类似资料:
  • 问题内容: 快速提问。 我在Linux下运行pygame只是为了播放一些音频文件。我有一些.wav文件,但在以正确的速度播放它们时遇到了问题。 我用ggogle代码搜索了一些东西,但是每个人似乎都可以使用默认参数调用init函数。其他人可以尝试运行此脚本,看看他们是否得到相同的行为吗?有人知道如何加快速度吗?还是调整每个文件的速度? 谢谢。 问题答案: 我知道了…有一个wave模块http://d

  • 这是在它自己的函数中,在同一个文件中: 你知道如何使用YouTube SDK在后台继续播放声音吗?还有,是不是可以只播放背景中的声音,不播放视频? 感谢任何帮助。

  • 本文向大家介绍Android MediaPlayer 音频倍速播放 调整播放速度问题,包括了Android MediaPlayer 音频倍速播放 调整播放速度问题的使用技巧和注意事项,需要的朋友参考一下 现在市面上的很多音视频App都有倍速播放的功能,例如把播放速度调整为0.5、1.5、2倍等等。 从Android API 23 (Android M)开始,MediaPlayer支持调整播放速度。

  • 问题内容: 我正在制作一个Java应用程序,我需要播放音频。尽管我计划循环播放背景音乐,但我主要播放的是我的大炮射击(它是大炮射击游戏)和弹丸爆炸的小声音文件。我找到了两种不同的方法来实现此目的,但是两种方法都不符合我的要求。 第一种方法实际上是一种方法: 问题是我的整个程序停止运行,直到声音文件完成或至少接近完成。 第二种方法是这样的: 我这里的问题是,每次声音文件提早结束或根本不播放时,这取决

  • 那么如何在iPhone上播放完一个视频后直接播放一个视频呢?我把这个 NSString*filepath=[[NSBundle mainBundle]pathforresource:@“movie”oftype:@“m4v”];NSURL*fileurl=[NSURL fileurlwithpath:filePath];MPMoviePlayerController*moviePlayerCont

  • 我正在使用媒体播放器播放带有列表视图的原始文件夹中的音频文件。一切正常,但我有一个问题。 问题是:当第一个音频文件结束时,它播放第二个文件,但当第二个文件结束时,它不播放第三个文件。 问题是什么??我尝试在mp上添加setOnCompletionListener并重置mp并在(位置+1)中播放audion,这是真的吗? 我还有一个问题。当它结束播放listview中的第一个项目并开始播放第二个项目