4

UILocalNotificationアプリが実行されていない場合にユーザーに警告し、MPMusicPlayerControlleriPod の音楽MPMoviePlayerControllerを再生し、ラジオ ストリームの URL を再生するために使用しています。

Apple doc によると: iPhone がロックされ、デバイスがローカル通知を受信した場合、30 秒間のサウンドが再生され、ユーザーがスライダーをスライドすると、アプリがフォアグラウンドになり、2 つのシナリオが発生します。

  1. アプリが実行されていない場合は、メソッドを呼び出します

    (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

  2. アプリがすでに実行されている場合は、メソッドを呼び出します -

    (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notify

これらの方法でタスクを実行できます。

問題 : iPhone がロックされ、ローカル通知が受信され、アプリがフォアグラウンドで実行されているときに、アプリケーションでサウンドを再生できるようにする必要があります (iPod の音楽またはストリーム URL である可能性がありますが、30 秒間はローカル通知音ではありません)。

参考アプリ:「目覚まし時計 HD」やアプリストアにある他のアプリはこの方法で問題なく動作していますが、アプリがバックグラウンドで実行されている場合、これらはアラームを鳴らすことができません (理由がわかりませんでした???)

また、 how-to-prevent-iphone-from-deep-sleepingも試し ました:

サイレントミュージックを定期的に再生することでiPhoneがディープスリープするのを防ぎますが、通知が受信されたことをアプリに通知して「実際の音楽」の再生を開始するにはどうすればよいですか? そして、新しい音楽の再生を開始するにはどうすればよいですか?

4

2 に答える 2

5

@manju申し訳ありませんが遅くなりましたが、うまくいきます。

 selectedDate = [timePicker date];

それは selectedDate 日付オブジェクトです。この時点で通知が来ます。
[NSDate date]これにより、現在の時刻を見つけることができます。両方の時間を経由して異なるものを見つけます。

 NSTimeInterval timeDifference =  [ selectedDate timeIntervalSinceDate:[NSDate date]];   

通知をスケジュールしたら、次のコードを書きます

 UIApplication *app = [UIApplication sharedApplication];
 UIBackgroundTaskIdentifier bgTask = 0;

 NSTimer  *backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:timeDifference    target:self  selector:@selector(backgroundTask) userInfo:nil repeats:NO];


    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
    }];

    -(void)backgroundTask
    {
        NSLog(@"Here you can play song via player ");
       }

app.infolist に追加することを忘れないでください

UIApplication BackgroundMode Audio 問題を解決し、デバイスがロックされているときに曲を再生します。

于 2013-05-16T11:49:04.043 に答える
2

AVAudioSessionCategoryPlaybackオーディオセッションに使用します。オーディオ セッション プログラミング ガイド はこちら

于 2013-03-05T11:52:52.370 に答える