24

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

今では、最大40分 - 最大1時間です。

私は少なくとも1日ほどは望んでいます。

この "bluetooth-central"値は.plistファイルの "Required background modes"キーに追加されています。

私のアプリは最後に「サスペンド」モードになるようです。アプリをもう一度開くと(前景状態の背景)通知を再び送信しているため、Bluetooth接続がまだ接続されていて、BLEデバイスがまだ通知を送信していることを意味します。私はホームボタンを押して、アプリがバックグラウンドに来る場合、それは再び通知を取得しません。

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

アップルはバックグラウンドアプリ(5つのカテゴリに含まれる連続して実行されるバックグラウンドアプリのうちの1つ)が失敗してサスペンドモードになる条件について具体的に言いますか? I 2つの実装がnecessoryあるブルートゥースLEアプリケーションの実行時間の長いバックグラウンドタスクのために、それを知って来る「iPhoneAppProgrammingGuide」、「Communicating with a Bluetooth Accessory」セクション、 に参照

1)UIBackgroundModesキーがなければならない「ブルートゥース中央"のファイルInfo.plistにあります。 2)Bluetoothデータのバックグラウンド処理をサポートするアプリは、すべてセッションベースでなければなりません。

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

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

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

誰かが私に助けてくれますか。どのセッションクラスがBLEに適していますか?

+0

あなたは、あなたが望む限り、バックグラウンドで実行できるはずです。 –

+2

私は同じことを見ている。私の周辺機器は数分間、iOSデバイスとの接続を失う可能性があり、範囲内に戻ってくると、バックグラウンドされたアプリはそれを見つけて続行します。しかし、何時間も接続が失われてしまうと、バックグラウンドのアプリはやり直しをやめます。 – Jonathan

+0

ハックする必要がある場合は、バックグラウンドサウンドの再生も可能にし、アプリがバックグラウンドに入ったときに短いサイレントサウンドを連続してループし、アクティブになると停止します。 –

答えて

5

私は問題が私の画面のように、あなたにinfo.plistを実装するための簡単な試みだと思う:

enter image description here
そして、あなたは、あなたは、Bluetooth、AirPlayの無線LANなどを可能にするためにdidFinishLaunchingWithOptionsAppDelegate.mに機能を追加することができますしたい場合は、これは単なるコード例ですが、私はあなたを助けることができると思います。

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]; 

希望すると、これが役に立ちます。

関連する問題