Iphone IOS应用程序不在后台运行

Iphone IOS应用程序不在后台运行,iphone,ios,audio,multitasking,avaudiosession,Iphone,Ios,Audio,Multitasking,Avaudiosession,我想我的应用程序音频运行在后台,我已经遵循,但它不工作。当我按下home(主页)按钮时,我的应用程序音频仍然停止,我意识到它没有调用“ApplicationIDBecMeactive”或“ApplicationIdentinterBackground”(即使我禁用了“应用程序不在后台运行”设置,问题仍然存在)。过去一周我一直在处理这个问题 到目前为止,我已经完成了以下步骤: -添加了AVFoundation框架并声明 #import <AVFoundation/AVFoundation.h

我想我的应用程序音频运行在后台,我已经遵循,但它不工作。当我按下home(主页)按钮时,我的应用程序音频仍然停止,我意识到它没有调用“ApplicationIDBecMeactive”或“ApplicationIdentinterBackground”(即使我禁用了“应用程序不在后台运行”设置,问题仍然存在)。过去一周我一直在处理这个问题

到目前为止,我已经完成了以下步骤:

-添加了AVFoundation框架并声明

#import <AVFoundation/AVFoundation.h>
-在plist中添加行

更新:


我的应用程序是一个音频应用程序,用户可以播放我的应用程序的特定音轨,即使它进入背景。有可能吗?

我认为它必须积极播放音频才能工作。如果你的应用程序实际上不是一个音频应用程序,你可以尝试将该应用程序设置为VoIP;这不需要活动连接。它也不会阻止其他想要使用音频的应用程序。只需将后台模式设置为“应用程序提供IP语音服务”,然后它将在后台一次运行10分钟;你可以连接一个VoIP套接字,并将内容推送到它,如果你想让它保持活力或唤醒它的话。

我建议你阅读


在一些有限的情况下,应用程序可以在后台工作,例如(音频、下载、更新等),你可以在我提供给你的链接中找到所有这些

使用此选项,它将在运行代码中工作

NSURL*url=[NSURL fileURLWithPath:[NSString stringWithFormat:@“%@/notification.wav”,[[NSBundle mainBundle]resourcePath]]

            NSError *error;
[[AVAudioSession sharedInstance]设置类别:AVAudioSessionCategoryPlayback错误:nil]

            AudioSessionInitialize( NULL, NULL, NULL,NULL);
            UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
            AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
            UInt32 value = YES;
            AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value);
            AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(value), &value);
            [[AVAudioSession sharedInstance] setActive: YES error: nil];
            AudioSessionSetActive(true);



            // self.appAudioPlayer=audioPlayer;
             AVAudioPlayer  *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
            self.audioPlayerForPlay.delegate = self;
            self.audioPlayerForPlay.numberOfLoops=-1;
            [self.audioPlayerForPlay prepareToPlay];
            UInt32 doChangeDefaultRoute = 1;
            AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);





            self.audioPlayerForPlay = audioPlayer101;
            [audioPlayer101 release];
            [self.audioPlayerForPlay play];

我认为我的应用程序考虑音频应用程序,因为用户可以继续听我的应用音频音乐时,它是在后台。我需要把代码放在哪里?介意给我解释一下吗?我对此有点茫然。多谢各位@安克尔
            AudioSessionInitialize( NULL, NULL, NULL,NULL);
            UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
            AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
            UInt32 value = YES;
            AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value);
            AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(value), &value);
            [[AVAudioSession sharedInstance] setActive: YES error: nil];
            AudioSessionSetActive(true);



            // self.appAudioPlayer=audioPlayer;
             AVAudioPlayer  *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
            self.audioPlayerForPlay.delegate = self;
            self.audioPlayerForPlay.numberOfLoops=-1;
            [self.audioPlayerForPlay prepareToPlay];
            UInt32 doChangeDefaultRoute = 1;
            AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);





            self.audioPlayerForPlay = audioPlayer101;
            [audioPlayer101 release];
            [self.audioPlayerForPlay play];