通常の状況では正常にBLEデバイスに接続できます。私がしたいのは、デバイスへの接続が失われたり、確立された接続が失われたりするなど、異常な状況を処理することです。Android:BLE接続の捕捉に失敗/切断しますか?
私はCyPress BLEモジュールを使用していますこれをテストし、私がやっているテストの1つは、モジュールから電力を取り除くことです。ただし、onConnectionStateChangeは呼び出されません。私がそれに反応するのは成功した接続だけです。接続しようとして何時間も過ごし、明らかにあきらめることはありません。私は、接続の試みの遅延キャンセルを行うだろうが、(私が知っている)BluetoothDeviceの接続試行をキャンセルする方法はありません!私が言う限り、バッテリーが消耗するまで試し続けます。
ここで、私のonConnectionStateChangeは、Gattコールバックの内部にあります。私はどのような種類の接続状態の変更を含むコールバックを捕まえてログに記録しようとしていることに注意してください。これはコードがアクティビティ自体にないことに注意してください。それはシングルトンによって保持されるオブジェクト内にあります。
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
mGatt = gatt;
Logy.CallPrint(LOGY_ENABLE, CLASSNAME, "Status: "+status+ " Newstate: "+newState);
switch(status)
{
case BluetoothGatt.GATT_SUCCESS:
mReconnectAttempts = MAX_ATTEMPTS;
if(newState == BluetoothGatt.STATE_CONNECTED)
{
DispatchEvent(Event.Type.BT_ON_CONNECT);
bIsConnected = true;
gatt.discoverServices();
} else if (newState == BluetoothGatt.STATE_DISCONNECTED)
{
DispatchEvent(Event.Type.BT_ON_DISCONNECT);
bIsConnected = false;
}
break;
default:
if(newState == BluetoothGatt.STATE_DISCONNECTED)
{
bIsConnected = false;
if(mReconnectAttempts > 0)
{ // if we have attempts left, auto attempt to reconnect
DispatchEvent(Event.Type.BT_RECONNECTING);
mReconnectAttempts--;
gatt.connect();
bIsConnected = false;
}
else
{
mReconnectAttempts = MAX_ATTEMPTS;
DispatchEvent(Event.Type.BT_ON_CONNECT_FAIL);
bIsConnected = false;
}
} else {
Logy.CallPrint(LOGY_ENABLE, CLASSNAME, "onConnectionStateChange: Failed?");
}
}
super.onConnectionStateChange(gatt, status, newState);
}
が切断を検出することができない(私は複数のアクティビティ間の接続を維持したいことは)私はアプリがBLEデバイスに接続されて示すプログレスダイアログを見せるように、他の場所で私のコードでは問題です。さて、このダイアログは "On Connect Fail"というイベントが決して投げられないので、決して消えません。
を失った接続が考慮される前に2つのデータ・パケットPDUを受信間の最大時間を定義するパラメータ:
私の関心事は、あなたがBluetoothDeviceしか持っておらず、それを接続している期間です。切断を呼び出すBluetoothGattはありません。長い間「デバイスに接続しようとしました」という後にonConnectionStateChangeは呼び出されません。また、これが長すぎる場合でもconnectonの試行をキャンセルする明白な方法はありませんでした。別のデバイスとの接続を開始することによって、他のデバイスとのこの前回の接続試行も最終的には完了します。 –