在背景通訊

本指南概略說明如何支援主要用途,以便在應用程式於背景執行時,與周邊裝置通訊:

有多種選項可支援上述各項用途。每種方法各有優缺點,可能適合或不適合您的特定需求。

下圖簡要說明本頁的指引:

尋找裝置

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

在背景中

在應用程式不可見時,使用這兩種 API 沒有任何限制,但兩者都需要應用程式程序處於運作狀態。如果應用程式程序未執行,您可以使用下列解決方法:

連結裝置

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

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

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

在背景中

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

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

與裝置保持連線

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

在這兩種情況下,您都可以選擇下列選項:

切換應用程式時

尋找裝置、連線及傳輸資料,都需要耗費時間和資源。為避免連線中斷,以及使用者每次切換應用程式或同時執行多項工作時,都必須執行完整程序,請務必保持連線,直到作業完成為止。您可以使用 connectedDevice 類型的前景服務,或配對裝置偵測 API。

聽取周邊裝置通知時

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

無論是哪種情況,您都可以按照「連線至裝置」一節中的操作說明,在程序終止後重新連線。