2017-03-05 399 views
0

我爲IONIC 2開發應用程序。我有要求,當我的BLE設備在範圍內自動連接到它。這種情況是我的應用程序是在後臺還是在前臺,我想自動連接我的BLE設備,並且如果斷開連接,則不斷搜索我的設備並在範圍內重新連接。有沒有辦法做到這一點?我已經提到這個:https://github.com/don/cordova-plugin-ble-central。我還提出了關於檢測BLE連接的問題:How to register for BLE state notification in IONIC 2。但沒有解決方案正在與此相關。但我沒有找到任何東西。請建議任何方式來做到這一點。我想解決這個問題應該可以在iOS和Android上運行。如何在範圍內自動連接BLE設備?

回答

0

我自己只知道android部分。 我認爲這不是一個好的努力,因爲發生這種情況時,藍牙必須始終處於開啓狀態,並且如果設備處於範圍內,設備應始終環視設備。

有一些方法可以做到像Alarm ManagerJob Scheduler(你想要什麼你的應用是否在前臺或後臺,甚至重啓該做的),而是因爲它使移動活着(屏幕和硬件)我不建議這樣做並排出電池。

如果您想這樣做,請將您的搜索間隔設置爲儘可能最小。 您可以使用下面的文章和頁面等來獲得更多的說明。

Link 1

Link 2

1

在Android中,正確的方法來建立具有以下屬性的一個長期運行的連接:

  1. 如果設備不在範圍內,它會自動連接當它終於進入範圍(沒有超時)。
  2. 當設備由於某種原因斷開連接時,Android會在範圍內自動重新連接。

是使用https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback)

其中AUTOCONNECT參數設置爲true。如果設置爲false,它將有30秒的超時時間,並且在設備斷開連接時也不會自動重新連接。

那個cordova插件,你不幸將硬編碼autoConnect設爲false。因此,您可以更改插件,以便將autoConnect設置爲true,或者您可以設置掃描,永久掃描並連接到您感興趣的設備。但是,該cordova插件使用最大掃描間隔(意味着它掃描100%的時間),通常設置爲平均掃描5-10%的時間,以便不佔用Wi-Fi帶寬,同時節省電池。 ..我說的是,科爾多瓦插件似乎並沒有創建的目的,你會有長期運行的後臺連接,可能需要一些時間來連接。

爲了確保您的應用程序不會在後臺死亡,您需要在連接到BLE設備的同一進程中的某處運行「Foreground Service」(https://developer.android.com/guide/components/services.html#Foreground)。