实际上我从文档目录中获取歌曲。
我提到了这个链接: - http://www.raywenderlich.com/29948/backgrounding-for-ios,但它只播放来自捆绑的歌曲。但我想播放文件目录中的歌曲。
我试过
Plist中的背景模式
应用程序不在背景中=在Plist中没有
在Appdelegate didFinishLaunchingWithOptions: -
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
PlayMethod()
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:saveFileName];
NSURL *url1 = [[NSURL alloc] initFileURLWithPath: path];
self.audioPlayer=[[AVAudioPlayer alloc] initWithContentsOfURL:url1 error:NULL];
[self.audioPlayer play];
self.seekBarSlider.minimumValue = 0.0f;
self.seekBarSlider.maximumValue = self.audioPlayer.duration;
//[self updateTime];
self.isPlaying=YES;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
_audioPlayer.delegate=self;
NSError *error;
UIBackgroundTaskIdentifier bgTaskId = 0;
if (_audioPlayer == nil)
NSLog([error description]);
else{
UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
[_audioPlayer prepareToPlay];
if([_audioPlayer play]){
newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
}
if (newTaskId != UIBackgroundTaskInvalid && bgTaskId != UIBackgroundTaskInvalid)
[[UIApplication sharedApplication] endBackgroundTask: bgTaskId];
bgTaskId = newTaskId;
}
}
数据保护:
Under the Xcode -> capabilities .
所有我尝试但不工作!任何人都可以帮助我。
答案 0 :(得分:1)
当您的设备解锁时,它是否在后台运行?
如果是这样,这听起来像权限问题。如果您已在developer.apple.com上为您的应用启用了数据保护。虽然设备使用密码锁定,但您无法读取文档目录,因为文件已加密。
我们在设备被锁定时试图写入数据库时遇到困难。浪费了两天时间才想出那个。
w ^
答案 1 :(得分:1)
我使用了数据保护机制,特别是在我将NSDATA写入Documents目录之前。我需要将Protection None设置为特定的文件路径。所以我使用 NSProtectionNone 属性作为文件路径。 如果我们无法设置ProtentionNone属性,则Apple无法访问锁定状态上的文件。
NSDictionary *protection = [NSDictionary dictionaryWithObject:NSFileProtectionNone forKey:NSFileProtectionKey];
[[NSFileManager defaultManager] setAttributes:protection ofItemAtPath:_path error:nil];
if( [_rawData writeToFile:_path atomically:YES])
{
NSLog(@"HOpefully written into Documentz directory..");
}
else
{
NSLog(@"Writting file mechanism - Failed!");
}
我曾经在App Bundle的无限循环中播放Dummy音频文件。因此,使用AVFoundation Framework连续播放虚拟音频文件。所以我可以连续访问Documents目录音频文件。一个接一个。
答案 2 :(得分:0)
如果您将应用UIBackgroundModes
中的Info.plist
键设置为audio
,则音频将在后台播放时继续播放。
audio:该应用在后台播放可听内容。
有关UIBackgroundModes
键的更多信息,请检查here
答案 3 :(得分:0)
您的设备上是否还有其他音频/视频应用正在运行?其中一些也使用AVAudioSessionCategoryPlayback可能会中断您的音频会话。
How it is said on Apple Developer:
默认情况下,使用此类别意味着您的应用的音频不可混合 - 激活您的会话将中断任何其他也不可混合的音频会话。要允许混合此类别,请使用AVAudioSessionCategoryOptionMixWithOthers选项。