0

ローカル通知を設定しています。起動したら、アプリが「スリープ」モードになっていて、ホームボタンが押されているか、アプリを終了したとします。これで通知が受信されます。アプリに赤いタグが表示されます。アプリをクリックすると、起動するはずですが、起動しませんdidReceiveLocalNotification。アプリを開いたときにどうすればそれを実行できますか?

4

3 に答える 3

1

このdidReceiveLocalNotificationメソッドは、アプリケーションがフォアグラウンドで実行されている場合にのみ呼び出されます。バッジが表示され、アプリをクリックして開始する場合は、application:willFinishLaunchingWithOptions:(またはapplication:didFinishLaunchingWithOptions:)を使用してローカル通知を処理する必要があります。これら2つの方法のいずれかでローカル通知を取得するUIApplicationLaunchOptionsLocalNotificationKeyには、オプション辞書のキーとして使用します。

[編集]UILocalNotificationドキュメントから:

ローカル通知がアプリケーションアイコンにバッジを付けるだけで、それに応じてユーザーがアプリケーションを起動した場合、application:didFinishLaunchingWithOptions:メソッドが呼び出されますが、UILocalNotificationオブジェクトはオプションディクショナリに含まれていません。

于 2013-03-20T02:18:13.380 に答える
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");
 }

これがお役に立てば幸いです。

于 2013-03-20T04:48:01.597 に答える
0

発火日を設定するときは、通知オブジェクトのuserInfoプロパティを設定しましたか?&ruデバイスまたはシミュレーターでチェックしますか?

于 2013-03-20T09:34:42.073 に答える