我在我的应用程序中使用“应用程序寄存器进行位置更新”后台模式以从后台获取位置信息。我的要求是,我需要播放音频文件,如果用户更近(约100米)到预定义地点。当应用程序处于活动状态(前景)但它没有从后台播放任何音频时,此功能正常。
self.locationManager = [[CLLocationManager alloc]init ];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
// delegate method
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
CLLocationDistance distance = [newLocation distanceFromLocation:definedLocation];
//Check the distance between the newLocation and userDefinedLOcation
if (distance <=100.00) {
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@.wav", [[NSBundle mainBundle] resourcePath],[[NSUserDefaults standardUserDefaults]valueForKey:@"alarmSound"]]];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
player.numberOfLoops = -1;
player.currentTime = 0;
player.volume =1;
player.delegate=self;
[player prepareToPlay];
[player play];
}
}
如何使用“应用寄存器进行位置更新”后台模式在后台播放音频文件,帮助我实现这一目标。我的应用程序因为之前使用“app播放音频”后台模式而被拒绝。所以我不想使用音频后台模式。 任何帮助都是适当的。
答案 0 :(得分:0)
您是否明确设置了音频会话类别?
音频会话编程指南有一个有用的部分“选择最佳类别”,它描述了不同的选项: Audio Session Programming Guide
我现在不在Mac前面,所以我无法测试。但是我怀疑在你的应用程序多任务处理时,将以下内容添加到viewDidLoad方法可能会有所帮助。
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];