2013-03-20 8 views
0

У меня есть локальное уведомление. Как только его уволили, скажем, мое приложение находится в режиме «сна», на котором нажата кнопка дома, или я уйду из нее. Теперь уведомление получено. Я вижу красный тег в своем приложении, и когда я нажимаю на приложение, он должен запускать didReceiveLocalNotification, но это не так. Как я могу сделать это, когда открываю приложение?Локальное уведомление Не отображается, когда приложение открывается

ответ

1

Метод didReceiveLocalNotification вызывается только в том случае, если приложение работает на переднем плане. Если вы видите значок и нажмите на приложение, чтобы запустить его, вам необходимо обработать локальное уведомление, используя application:willFinishLaunchingWithOptions: (или application:didFinishLaunchingWithOptions:). Чтобы получить локальное уведомление одним из этих двух методов, используйте UIApplicationLaunchOptionsLocalNotificationKey в качестве ключа к словарю параметров ,

[редактировать] Из документации UILocalNotification:

, если местное уведомление только значки значка приложения, а пользователя в ответ запускает приложение, в приложении: didFinishLaunchingWithOptions: метод вызывается, но не Объект UILocalNotification включен в словарь опций.

+0

параметры запуска возвращают нуль ..... я могу видеть уведомление на панели уведомлений, но параметры запуска возвращают нуль, когда я открываю приложение –

+0

Был ли словарь launchOptions nil? Если нет, то каково его содержание? – GoZoner

+0

Да, это неправильно. Это ноль. Он должен что-то вернуть. Я попробовал сделать простое уведомление в didEnterBackground. Открытое приложение, нажатие кнопки дома. Закройте приложение, используя Xcode, а затем после получения уведомления отредактируйте его с помощью Xcode. Еще нет. –

0
-(void)alarmNotification 
    { 
     NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 

     NSDate *newdate = timePicker.date; 

     NSLog(@"pickerdate:%@",newdate); 

     NSDate *pickerDate =[newdate dateByAddingTimeInterval:-60*1]; 

     NSLog(@"pickerdate:%@",timePicker.date); 

     // Break the date up into components 
     NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit |  NSMonthCalendarUnit | NSDayCalendarUnit) 
                fromDate:pickerDate]; 
     NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
               fromDate:pickerDate]; 
    // Set up the fire time 
     NSDateComponents *dateComps = [[NSDateComponents alloc] init]; 
    [dateComps setDay:[dateComponents day]]; 
    [dateComps setMonth:[dateComponents month]]; 
    [dateComps setYear:[dateComponents year]]; 
    [dateComps setHour:[timeComponents hour]]; 
    // Notification will fire in one minute 
    [dateComps setMinute:[timeComponents minute]]; 
    [dateComps setSecond:[timeComponents second]]; 
     NSDate *itemDate = [calendar dateFromComponents:dateComps]; 
     [dateComps release]; 

     localNotif = [[UILocalNotification alloc] init]; 
     if (localNotif == nil) 
     return; 
     localNotif.fireDate = itemDate; 
     localNotif.timeZone = [NSTimeZone defaultTimeZone]; 

    // Notification details 
     localNotif.alertBody = txtMeetingName.text; 

    // Set the action button 
     localNotif.alertAction = NSLocalizedString(@"View!", nil); 

     localNotif.soundName = UILocalNotificationDefaultSoundName; 

     // Specify custom data for the notification 
     NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"]; 
     localNotif.userInfo = infoDict; 

     localNotif.applicationIconBadgeNumber =1; 

     [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 


     } 

Затем реализовать этот код ......

 - (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif { 
    // Handle the notificaton when the app is running 
     NSDateComponents *comps = [[NSCalendar currentCalendar] components:notif.repeatInterval fromDate:notif.fireDate toDate:[NSDate date] options:0]; 
    // you can set your own sound 
     NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/win.wav", [[NSBundle mainBundle] resourcePath]]]; 

    NSError *error; 

     UIAlertView *alertView = 
    [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"move on", nil) 
          message:[NSString stringWithFormat:@"You have to start %@ meeting within 5 minute",notif.alertBody] 
          delegate:self 
       cancelButtonTitle:nil 
       otherButtonTitles:NSLocalizedString(@"OK", nil), nil]; 

     notif.soundName = UILocalNotificationDefaultSoundName; 


     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
     audioPlayer.numberOfLoops = -1; 
     if (audioPlayer == nil) 
     NSLog(@"error%@",[error description]); 
     else 
     [audioPlayer play]; 
     [alertView show]; 
     [alertView release]; 

    } 


    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:  (NSInteger)buttonIndex{ 
    if (buttonIndex==0) { 
    [audioPlayer stop];  

    } 
    NSLog(@"U HAVE CLICKED BUTTON"); 
} 

надеюсь, что это поможет вам .....

+1

Я хочу получить его в didFinishLaunchOptions, он работает хорошо с didReceive. Фактически, когда приложение закрыто и открыто нормально, в отличие от push-уведомления, оно никогда не появляется в launchOptons –

0

Когда вы устанавливаете дату пожара, то есть у вас установить свойство userInfo вашего объекта уведомления ??? & r u проверить его на устройстве или на тренажере?

+0

Уведомление запускается Просто отлично. Когда я нажимаю на уведомление, он вызывает callReceiveNotification. Однако, в отличие от Push-уведомлений, когда приложение закрыто, оно не будет отображаться в параметрах запуска в файле didFinishWithLaunchOptions –

+0

. Ok ... но у вас установлено свойство userinfo вашего объекта уведомления? – Kalyani

+0

@MuhammadUmar & r u тестирование на симуляторе или на реальном устройстве – Kalyani

Смежные вопросы