2011-07-20 17 views
0

私はiOS4用のアプリを開発しています。アプリケーションは、2つの主要なコンポーネントで構成されています.1つはバックグラウンドで実行する必要があり、もう1つは常に画面に表示され、最初のコンポーネントからデータを取り込みます。ここに問題があります:最初のコンポーネントは、バックグラウンドに置かれるまでうまく動作します。その時点で、データの送信が停止されます。何故ですか?回避策はありますか?iOS4アプリをバックグラウンドで実行するにはどうすればよいですか?

ありがとうございます。

+0

[こちらの別の投稿](http://stackoverflow.com/q/6420866/491980)。 – EmptyStack

+1

回避策はありません。アップルは、VoIP、オーディオ、またはGPSをバックグラウンドで実行し続ける言い訳として使用する場合は、アプリケーションを拒否します。これらのタスクは、アプリケーションのコア機能に関連している必要があります。 – Jano

+0

これは[documentation](http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html)で非常に明確に説明されています。 – bshirley

答えて

1

VOIP、オーディオ、またはロケーションベースのアプリをバックグラウンドでのみ実行することは許可されていません。 アプリがこれらのカテゴリのいずれかに該当しない限り、バックグラウンドでアプリを動作させる方法はありません。

+0

私のアプリケーションとは関係ないのに、私はバックグラウンドで音楽を演奏することができました。 –

+0

こんにちはrckoenes、返信いただきありがとうございます。私は、私のアプリをバックグラウンドでサウンドファイルを再生しようとしましたが、 "app plays audio"に必要なバックグラウンドモードが設定されていても、何も変わりませんでした。私はAVAudioPlayerライブラリを使用しました。それは間違っていますか?私は別のものを使用すべきか? –

1

アップルでは、​​特定の種類のアプリだけをナビゲーションやVOIPアプリなどのバックグラウンドで実行して、2つのアプリだけを許可しています。しかし、それらは必要な作業だけに限られています。

"longrunning background tasks"は唯一の選択肢です。これにより、アプリはバックグラウンドで最大10分間(この「猶予期間」の正確な期間は変更される可能性があります。 Hipstamaticのようなアプリでは、アプリをバックグラウンドに移動しても画像のポストプロダクションを終了します。

+0

ちょっとToastor、返信いただきありがとうございます。私は、私のアプリをバックグラウンドでサウンドファイルを再生しようとしましたが、 "app plays audio"に必要なバックグラウンドモードが設定されていても、何も変わりませんでした。あなたが言った2番目のオプションを正確に実装する方法を知っていますか? –

3

VoIP、オーディオ、またはGPSを使用していない場合は、タスク完了モード(バックグラウンドでは10分に制限されています)のみ使用できます。あなたのランニングあればということを覚えておいてください

[app endBackgroundTask:bgTask]; 
bgTask = UIBackgroundTaskInvalid; 

UIApplication* app = [UIApplication sharedApplication]; 

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

と完了したら、あなたがそれを終了することができます:あなたがしてタスクを開始したいOSを伝えるために持っていることを行うには 10分以上経過すると、OSによってアプリが強制終了されます。

applicationDidEnterBackground:には、コードがメインスレッドをブロックしているという問題があります。その理由は、アプリケーションを終了するときにコードが強制終了される理由です。

あなたはapplicationDidEnterBackground:内のコードの実行を開始したい場合は、他の人が指摘したようにあなたがそれhere

+0

THank you、voidStern。あなたが投稿したコードをどこに置くべきかは私には分かりません。私は ' - (void)applicationDidEnterBackground:(UIApplication *)アプリケーションを試しました。 { UIApplication * app = [UIApplication sharedApplication]; bgTask = [アプリケーションbeginBackgroundTaskWithExpirationHandler:^ { [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; } ' –

+0

...しかし、それは何も変更されませんでした。 –

+1

答えにコードを使用する場所を追加しました(実際にはコメントでコードを書式設定できません)。 – voidStern

1

の詳細を読むことができるものは何でも、あなたがdispatch_async(queue, block_with_your_code);

でやりたいれるバックグラウンドタスクや派遣を開始する必要がありますこれを行う本当の方法はありませんが、いくつかのアプリが使用する回避策があります。あなたは基本的に、バックグラウンドでユーザのiPodライブラリからトラックを再生します。これにより、あなたのアプリはバックグラウンドで長時間働くことができます。 Tapbots' siteで詳細を読むことができます。

+0

ねえ、そうではありません。私はAVAudioPlayerライブラリを使用していますが、オプション "app plays audio"で設定された必須バックグラウンドモードでも、アプリケーションはバックグラウンドモードにはなりません。別のサウンドライブラリを使用するはずですか? –

+0

申し訳ありませんが、私はあなたにそれ以上のお手伝いをすることはできません。私は私のアプリの一つでこのようなものを必要としたことは一度もありませんし、ちょっと前にPastebotの記事に遭遇しました。 – Frog

+0

問題ありません。少なくとも公式の開発者ガイドによれば、オーディオライブラリは問題ではないようです。 –

関連する問題