在背景通訊

本指南概要說明應用程式在背景執行時,如何支援與週邊裝置通訊的重要用途:

在這些用途中,您都能透過多種方式支援。每種方法各有優缺點,可能都較適合您的特定需求。

下圖為本頁指南的簡化檢視畫面:

尋找裝置

首先,應用程式需要尋找要連線的裝置。如要尋找 BLE 裝置,您可以使用下列任一 API:

在背景中

這類 API 沒有限制,可以在應用程式不可見的情況下使用,但兩者都必須讓應用程式程序保持運作。如果應用程式程序並未執行,您可以使用下列解決方法:

連結裝置

找到裝置後,如要連線至裝置,您必須從下列其中一個來源取得裝置的 BluetoothDevice 執行個體:

取得 BluetoothDevice 執行個體後,您可以呼叫其中一種 connectGatt() 方法,向對應的裝置發出連線要求。您傳入 autoConnect 布林值的值會定義 GATT 用戶端使用下列哪一種連線模式:

  • 直接連線 (autoconnect = false):嘗試直接連線至週邊裝置,如果裝置無法使用,則連線失敗。如果中斷連線,GATT 用戶端不會自動嘗試重新連線。
  • 自動連線 (autoconnect = true):嘗試在周邊裝置可用時自動連線至裝置。如果週邊裝置啟動了中斷連線,或週邊裝置超出範圍,GATT 用戶端會在周邊裝置可用時自動嘗試重新連線。

在背景中

應用程式在背景執行時連線至裝置並無任何限制,不過如果程序終止,連線就會關閉。此外,系統也會從背景啟動活動 (Android 10 以上版本) 或前景服務 (Android 12 以上版本) 也有相關限制。

因此,如要在背景執行連線,應用程式可以使用下列解決方案:

與裝置保持連線

理想情況下,應用程式應只在必要時維持與週邊裝置的連線,並在工作完成後中斷連線。但在以下兩種情況下,應用程式可能需要無限期保持連線:

在這兩種情況下,皆可使用以下選項:

切換應用程式時

尋找裝置、連線至裝置及轉移資料既耗時又資源,為避免失去連線,並在每次使用者切換應用程式或同時執行多項工作時執行整個程序,您應讓連線保持運作,直到作業完成為止。您可以將前景服務與 connectedDevice 類型搭配使用,或使用隨附裝置狀態 API

聽取周邊裝置通知時

如要監聽週邊裝置通知,應用程式必須呼叫 setCharacteristicNotification()、使用 onCharacteristicChanged() 監聽回呼,並保持連線狀態。對大多數應用程式而言,最好使用 CompanionDeviceService 支援這個用途,因為應用程式可能需要長時間監聽。不過,您也可以使用前景服務。

不論是哪一種情況,您都可以在終止程序後重新連線,請按照連線至裝置一節中的指示操作。