在背景通訊

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

我們提供多種選項,可支援上述各項用途。每個選項都有優缺點,可能較適合或不太適合您的特定需求。

下圖簡要呈現本頁面指引的內容:

尋找裝置

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

在背景中

在應用程式不可見時,使用這兩種 API 並無任何限制,但兩者都需要應用程式程序處於運作狀態。如果應用程式程序未執行,您可以使用下列因應措施:

連結裝置

找到裝置後,如要連線,您必須從下列任一來源取得裝置的 BluetoothDevice 例項:

取得 BluetoothDevice 例項後,您可以呼叫其中一個 connectGatt() 方法,啟動對應裝置的連線要求。您傳遞至 autoConnect 布林值的值,會定義 GATT 用戶端會使用下列兩種連線模式中的哪一種:

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

在背景中

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

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

保持連線

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

無論是哪種情況,您都可以使用下列選項:

切換應用程式時

尋找裝置、連線及傳輸資料的作業耗時且耗用大量資源。為避免連線中斷,並在使用者每次切換應用程式或同時執行多項工作時,必須執行完整程序,因此您應在作業完成前保持連線。您可以使用 connectedDevice 類型的前景服務,或隨附裝置狀態 API

聽取周邊裝置通知時

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

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