2011-02-08 6 views
10

私は、ユーザーがiPodアプリで行うすべてのことを追跡するアプリを持っています。これを行うために、私はMPNusicPlayerControllerNowPlayingItemDidChangeNotificationのようにNSNotificationCenterにオブザーバーを少し追加しました。しかし、私の問題は、アプリがフォアグラウンドにあるときに通知を受け取るだけです。バックグラウンドで通知がキューに追加され、次にアプリがアクティブになったときに通知が届きます。私はリアルタイムの通知を受信したいので、私はこのキューに関心がありません。バックグラウンドモードでアプリで通知を受け取る

私のアプリがサスペンド状態にある場合でも、それらの通知を得るために私のための方法はありますか?このNowPlayingItemDidChange通知を得るたびに、コードの3行だけを実行したいとします。

ここに私がオブザーバーを追加します。私が代わりにiPodMediaPlayerの観察者にオブジェクトの別の種類を追加した場合

MPMusicPlayerController *iPodMediaPlayer = [MPMusicPlayerController iPodMusicPlayer]; 



NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

    [notificationCenter addObserver: self selector: @selector(handle_NowPlayingItemChanged:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification 

            object:iPodMediaPlayer]; 


[iPodMediaPlayer beginGeneratingPlaybackNotifications]; 

また、観察者はメソッドを呼び出しません。彼らはフォアグラウンドでないとき

どうもありがとう、

Abras

答えて

6

iOSアプリケーションは中断されています。このルールには3つの例外があります。あなたは、あなたのアプリケーションがオーディオを再生

A)であれば、コードはバックグラウンドで実行させることができます。これは、アプリケーション自体が実際にオーディオを生成していることを意味します。私の理解では、MPMediaPlayerControllerのiPodMusicPlayerオブジェクトは、アプリケーション自体からオーディオを再生するのではなく、外部のiPodプロセスの再生を制御するだけです。おそらく、あなたがiPodMusicPlayerの代わりにapplicationMusicPlayerを呼び出して、あなたのアプリケーションInfo.plistに適切なバックグラウンドフラグを設定すれば、いくらか成功する可能性があります。これはアプリケーションを動作させる最も正当な方法のようですが、iPodの再生、あなたのアプリとシステムのオーディオコントロールからiPodの再生を制御することはできません。

b)の位置を監視するためにあなたのアプリを入手。アプリがGPSを使用している場合は、バックグラウンドで引き続き実行できます。これの欠点は、GPSがバッテリーを消耗し、ユーザーが自分の位置を要求していることを怖がっている可能性があることです。

c)に余分な時間のためのUIApplicationを確認して下さい。 UIApplicationのbeginBackgroundTaskメソッドを使用すると、アプリケーションはバックグラウンドで一定の時間実行され続けます。ユーザーが10分程度に1回アプリケーションに参加する予定であれば、これもうまくいく可能性があります。

希望に役立ちます。

+0

はい、この3つのオプションしかありません。しかし、システムに通知を登録する方法があると思われた場合、アプリはバックグラウンドモードに正常に入ります。ユーザーが通知をトリガーする何かをすると、Notification Centerは通知に応答できるようにアプリを起動させます。応答後、バックグラウンドモードに戻ります。 – Abras

+0

@Abras:これを行う方法を見つけましたか?私はオーディオアプリを持っています。また、バックグラウンドにいるときに通知を受け取るようにしたい(他のオーディオアプリが登場するとき)。どうすればいいのですか? – Namratha

+0

@Abrasこれはあなたがこれを理解しましたか? – WMios

0

のiOSでのマルチタスクは現在、非常に制限されたものです。あなたは(UIApplicationオブジェクトの)beginBackgroundTaskWithExpirationHandler:メソッドを使ってバックグラウンドタスクを開始することができますが、中断する前に有限長のタスクを終了することを意図しています。すべてのバックグラウンドタスクは、ジョブが終了する前に期限切れになることがあります。アプリケーションオブジェクトのプロパティーを確認することによって、アプリケーションの実行時間を確認できます。

+0

はい、それは私が欲しいものではありません。ユーザーが通知をトリガするたびに私のアプリケーションを呼び出させたい。 – Abras

+0

正確に。私はそれを行う方法がないと言っています、まあ、私が言うことができる限り。 – MHC

+0

ええ、アドバイスありがとう。私のオプションは自分のiPodを実装し、それを私のアプリに組み込むことだと思う。ユーザーフレンドリーではありませんが、少なくとも私が望むものを達成することはできます。 – Abras

0

私はここiOS receive Media Player Notifications when app is in backgroundを説明したように、iPodMusicPlayerからの通知を取得する方法はありませんようです。オマールラウルQaziの答えについて

A)私が試したと私は成功していません。ホームボタンを押すと、音楽は下がり続けました。私はこのバックグラウンドフラグは、通常のAudioSessionsでのみ動作し、MPMusicPlayerでは動作しないと思います...

b)は、私は、これがうまくいくことを確認していないと私はあなたがバックグラウンドでのみ同期タスクを実行することができます)、承認のため

Cを見たときに、Appleはそれを好きとは思いません。あなたは通知を待つことができません。私が間違っている?

関連する問題