我已将自定义.aif 30秒文件设置为本地通知声音名称。以下是我安排本地通知的代码。
//Function to schedule local notification
-(void)schedulelocalnotification:(NSDate *)particularfiredate ringtone: (NSString *)particularringtone name:(NSString *)alarmname info:(NSDictionary *)dicttext
{
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = particularfiredate;
notification.soundName = [arrayAIFFFiles objectAtIndex:[arraysoundfilesnames indexOfObject:particularringtone]];
notification.alertBody = alarmname;
notification.userInfo = dicttext;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
但是当设备被锁定,并且用户在通知上滑动以进入应用程序时,即使用户进入应用程序,声音也会继续播放。即使用户退出/卸载应用程序,它仍会继续播放。 请说明可能的原因。
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[[NSUserDefaults standardUserDefaults] setValue:@"0" forKey:@"demo"];
NSLog(@"%i",[[[UIApplication sharedApplication] scheduledLocalNotifications] count]);
NSString *viewcontrollerstring = [notification.userInfo objectForKey:@"smiletosnooze"];
NSLog(@"++++++------%@",viewcontrollerstring);
}
PS:我检查了 - UILocalNotification stop sound after notification is dismissed而这 - Stop UILocalNotification Sound on slide to view但它没有任何帮助。 :(
答案 0 :(得分:3)
这似乎是iOS 7提交的here的一个漏洞。当设备被密码锁定时,似乎也不会出现此问题。对我有用的一个非常丑陋的黑客是为应用程序徽章编号设置一个值,并在应用程序进入前台时立即将其删除。示例代码为:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
}
修改强>:
显然,上面提到的hack实际上并不适用于iOS 7.1+。我找到的唯一解决方法如下,但我对于将其称为实际答案非常犹豫:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
[session setActive:YES error:nil];
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
[musicPlayer setVolume:0.0f];
}
但是上面的代码有很多严重的缺陷:
setVolume
方法已被弃用(尽管很多应用程序仍在使用它)更新2014年9月18日
此问题似乎已在iOS 8上解决。