24

我在Iphone-4s中爲我的應用程序使用了核心藍牙框架。
這通常必須是可以運行儘可能長的後臺應用程序。針對Iphone 4s的Bluetooth LE應用程序的背景時間問題

現在它只能運行40分鐘 - 最多1小時。

我希望至少1天左右。

爲此「藍牙中央」值添加到.plist文件中的「所需的背景模式」鍵中。

看來我的應用程序將在最後「暫停」模式。因爲當我再次打開應用程序時(背景爲前景狀態),它將再次發送通知,這意味着藍牙連接仍然連接並且BLE設備仍在發送通知。如果我按主頁按鈕和應用程序來到背景,它不會再次得到通知。

有人可以告訴我爲什麼我的應用程序只能在後臺模式下工作最長1小時。它應該繼續像普通音樂應用程序一樣在後臺運行。

Apple是否會說出具體的背景應用程序(哪些是連續運行的後臺應用程序中的一個應用程序落在5個類別中的某個應用程序)的哪種情況,否則會進入掛起模式?

參考「iPhoneAppProgrammingGuide」,在「Communicating with a Bluetooth Accessory」部分, 我才知道,對於藍牙LE申請長期運行的後臺任務2點的實現是練琴:

1)UIBackgroundModes關鍵應該是「藍牙核心「在Info.plist文件中。 2)任何支持藍牙數據後臺處理的應用都必須基於會話。

因此,對於我的應用程序,首次實施已合併,並且該應用程序能夠在後臺運行,並且最長1小時執行所有任務 。

現在我需要實現第二個實現。即基於會話的。根據文檔,即使應用程序處於「掛起」狀態 ,也可以獲取事件。我試圖找到創建一個特定於Bluetooth LE(核心藍牙框架)的合適會話,如經典藍牙(外部附件框架)中的 「EASession」。但我沒有找到它。

基本上我不確定我需要使用哪個會話類來實現BLE目的。對於音頻/視頻,網絡和互聯網,外部附件, 有單獨的會話類可用。核心藍牙框架沒有。

任何人都可以幫助我,哪個會話類適用於BLE。

+0

你應該能夠在後臺運行,只要你想,你有沒有得到這個工作? – 2012-06-19 15:26:38

+2

我看到同樣的事情。我的外設可能會在幾分鐘內失去與ios設備的連接,當它回到範圍時,後臺應用程序會找到它並繼續。但是,如果它連接數小時後,後臺應用程序不再嘗試重新連接。 – Jonathan 2013-01-02 20:10:07

+0

如果您需要破解它,您可以啓用背景音效播放,並在應用程序進入後臺時連續播放短暫的無聲音,並在其變爲活動狀態時停止播放。 – 2013-05-29 09:53:17

回答

5

我認爲這個問題是試圖實現你info.plist喜歡我的屏幕上簡單:

enter image description here
如果你願意,你可以根據didFinishLaunchingWithOptionsAppDelegate.m添加功能,使藍牙,AirPlay的無線多,這只是一個示例代碼,但我認爲可以幫助你。

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

希望這可以幫助你。