0

我正嘗試將固件文件從我的應用程序傳輸到可穿戴硬件。 需要一段時間,當我的應用程序進入後臺或按下鎖定按鈕時,固件傳輸過程將停止。BLE後臺操作問題

理想情況下,它應該繼續傳輸固件。我正在使用此方法在後臺繼續此過程,並且還宣佈支持後臺模式。

- (void)applicationDidEnterBackground:(UIApplication *)application { 

    bgTask = 0; 
    bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
     // Clean up any unfinished task business by marking where you 
     // stopped or ending the task outright. 
     //[application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    // Start the long-running task and return immediately. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     // Do the work associated with the task, preferably in chunks. 

     //[application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }); 

}

這種方法是無法做到的任務。

但是,如果我在Appdelegate - didFinishLaunchingWithOptions中使用這種方法,它的工作原理。

但是將這段代碼放在上面的方法中有一種折衷,即如果我沒有傳輸固件,應用程序在後臺運行,那麼在3分鐘後,這段代碼將刪除應用程序和藍牙連接中斷。

如果我根本沒有使用這種方法,那麼連接將保持到手動中斷爲止,但不會發生背景傳輸。我不得不同時保持兩項操作。請提出一些建議,因爲我在這個問題上已經有很多天了。

在此先感謝。

+0

刪除所有的代碼是否外圍發送消息時,它已準備好進行下一個塊 - 即。你在使用writeWithResponse嗎?或者,如果此方法有效,爲什麼不簡單地在應用程序委託中設置布爾值,以指示是否更新固件,如果不需要則不啓動後臺任務? – Paulw11 2015-04-06 06:56:41

+0

@paulw: - 是的,當我發送一個數據包時,外設發回應答。另外我似乎無法理解如何設置標誌並在啓動固件升級時在-didFinishLaunchingWithOptions方法中將其設置爲true。另外,如果我在一個單獨的方法中編寫代碼塊,那麼如何獲取「應用程序」對象,因爲它在-didFinish方法[應用程序beginBackgroundTaskWithExpirationHandler]中可用。請清除疑問 – 2015-04-06 08:04:32

+0

如果您的外設支持writeWithNotify,那麼您應該可以使用標準藍牙背景模式,並且不需要後臺任務 – Paulw11 2015-04-06 08:25:30

回答

0

嘗試運行使用BackgroundModes 您的應用程序並從didEnterInbackground