23

私はiPhone-4sのアプリにコアBluetoothフレームワークを使用しています。
これは通常、できるだけ長く実行できるバックグラウンドアプリである必要があります。

現在、実行時間は40分から最大1時間です。

少なくとも1日くらいは期待しています。

この「bluetooth-central」の値は、.plistファイルの「Requiredbackgroundmodes」キーに追加されます。

最後に、私のアプリは「一時停止」モードになるようです。アプリを再度開くと(バックグラウンドからフォアグラウンド状態)、通知が再度送信されるため、Bluetooth接続が接続されたままで、BLEデバイスが通知を送信していることを意味します。ホームボタンを押してアプリがバックグラウンドになった場合、再度通知が届きません。

私のアプリが最大1時間だけバックグラウンドモードで動作する理由を誰かに教えてもらえますか?それは永遠のようにバックグラウンドで通常の音楽アプリのように実行し続ける必要があります。

Appleは、バックグラウンドアプリ(5つのカテゴリに分類される継続的に実行されているバックグラウンドアプリの1つ)がどの条件で失敗し、サスペンドモードになるかについて具体的なことを言っていますか?

iPhoneAppProgrammingGuide「」セクションの「」を参照するCommunicating with a Bluetooth Accessoryと、Bluetooth LEアプリケーションの長時間実行されるバックグラウンドタスクには、2つの実装が必要であることがわかります。

1)UIBackgroundModesキーは、Info.plistファイル内で「bluetooth-central」である必要があります。2)Bluetoothデータのバックグラウンド処理をサポートするアプリは、セッションベースである必要があります。

そのため、私のアプリでは、最初の実装が組み込まれ、そのアプリケーションをバックグラウンドで実行して、すべてのタスクを最大1時間実行できます。

次に、2番目の実装を実装する必要があります。つまり、セッションベースです。ドキュメントによると、アプリが「一時停止」状態であっても、イベントを取得できます。EASessionクラシックBluetooth(外部アクセサリフレームワーク)に存在する ""のようなBluetoothLE(コアBluetoothフレームワーク)に固有の適切なセッションを作成しようとしました。しかし、私はそれを見つけられませんでした。

基本的に、BLEの目的でどのセッションクラスを使用する必要があるかわかりません。オーディオ/ビデオ、ネットワーキング、インターネット、外部アクセサリについては、個別のセッションクラスを利用できます。コアBluetoothフレームワークにはありません。

BLEに適したセッションクラスを教えてください。

4

1 に答える 1

5

問題は簡単だと思いますinfo.plistが、私の画面のように実装してみてください:

ここに画像の説明を入力
AppDelegate.mまた、必要に応じて、Bluetooth、AirPlay WiFi などを有効に する機能を追加できますdidFinishLaunchingWithOptions。これは単なるコード例ですが、役立つと思います。

NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error:nil];

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

これがあなたを助けることを願っています。

于 2013-07-03T13:57:40.617 に答える