Commit 0c522b34 by Lee Jaebin

BLE対応(リモートデバイスが提供するサービスが見つからない場合は、リモートデバイスのキャッシュをリフレッシュさせてから再接続を行うように修正)

parent 6bd18805
...@@ -14,8 +14,10 @@ import android.bluetooth.le.ScanResult; ...@@ -14,8 +14,10 @@ import android.bluetooth.le.ScanResult;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.widget.Toast; import android.widget.Toast;
import java.lang.reflect.Method;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.util.List; import java.util.List;
...@@ -82,7 +84,7 @@ public class BleManagerUtil { ...@@ -82,7 +84,7 @@ public class BleManagerUtil {
} }
if( status == BluetoothGatt.GATT_SUCCESS && BluetoothProfile.STATE_CONNECTED == newState ) { if( status == BluetoothGatt.GATT_SUCCESS && BluetoothProfile.STATE_CONNECTED == newState ) {
mHandler.postDelayed(new Runnable() { new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
// 接続完了 // 接続完了
...@@ -103,7 +105,7 @@ public class BleManagerUtil { ...@@ -103,7 +105,7 @@ public class BleManagerUtil {
if( BluetoothProfile.STATE_DISCONNECTED == newState ) { // 切断完了(接続可能範囲から外れて切断された) if( BluetoothProfile.STATE_DISCONNECTED == newState ) { // 切断完了(接続可能範囲から外れて切断された)
// 切断が発生する場合、Bluetoothと接続を切断する。 // 切断が発生する場合、Bluetoothと接続を切断する。
disconnect(); disconnect(true);
return; return;
} }
} }
...@@ -117,7 +119,8 @@ public class BleManagerUtil { ...@@ -117,7 +119,8 @@ public class BleManagerUtil {
Logger.d(TAG, "--gattSize : " + gatt.getServices().size()); Logger.d(TAG, "--gattSize : " + gatt.getServices().size());
if (gatt.getServices().size() == 0) { if (gatt.getServices().size() == 0) {
mListener.onGetDeviceInfoFailed(-1); // サービスがない場合は、再接続
bleGattReconnect();
return; return;
} }
mBluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH); mBluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
...@@ -317,10 +320,12 @@ public class BleManagerUtil { ...@@ -317,10 +320,12 @@ public class BleManagerUtil {
} else { } else {
mBluetoothGatt = device.connectGatt(mContext, false, mGattcallback ); mBluetoothGatt = device.connectGatt(mContext, false, mGattcallback );
} }
// 該当デバイスのキャッシュをリフレッシュ
refreshDeviceCache(mBluetoothGatt);
} }
// 切断 // 切断
public void disconnect() { public void disconnect(boolean listenerFlg) {
if(mBluetoothGatt == null) { if(mBluetoothGatt == null) {
return; return;
} }
...@@ -334,14 +339,15 @@ public class BleManagerUtil { ...@@ -334,14 +339,15 @@ public class BleManagerUtil {
mBluetoothGatt.disconnect(); mBluetoothGatt.disconnect();
mBluetoothGatt.close(); mBluetoothGatt.close();
mBluetoothGatt = null; mBluetoothGatt = null;
if (listenerFlg) {
runOnUiThread( new Runnable() { runOnUiThread( new Runnable() {
@Override @Override
public void run() { public void run() {
// 切断トーストメッセージを表示する。 // 切断トーストメッセージを表示する。
mListener.onDisConnectionState(); mListener.onDisConnectionState();
} }
}); });
}
} }
// キャラクタリスティックの読み込み // キャラクタリスティックの読み込み
...@@ -375,7 +381,7 @@ public class BleManagerUtil { ...@@ -375,7 +381,7 @@ public class BleManagerUtil {
// Signed short (16-bit) Two's complement to short, String // Signed short (16-bit) Two's complement to short, String
public String byteToString(byte[] bytes) { public String byteToString(byte[] bytes) {
short sht = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getShort(); short sht = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getShort();
float flt = sht/(float)100; float flt = sht / (float)100;
return String.valueOf(flt); return String.valueOf(flt);
} }
...@@ -407,4 +413,32 @@ public class BleManagerUtil { ...@@ -407,4 +413,32 @@ public class BleManagerUtil {
UUID_CHARACTERISTIC_PRIVATE = UUID.fromString("46202b74-cfe1-11e7-abc4-cec278b6b50a"); UUID_CHARACTERISTIC_PRIVATE = UUID.fromString("46202b74-cfe1-11e7-abc4-cec278b6b50a");
} }
} }
/**
* bleGattのcache更新
* @param gatt
* @return
*/
private boolean refreshDeviceCache(BluetoothGatt gatt){
try {
BluetoothGatt localBluetoothGatt = gatt;
Method localMethod = localBluetoothGatt.getClass().getMethod("refresh", new Class[0]);
if (localMethod != null) {
boolean bool = ((Boolean) localMethod.invoke(localBluetoothGatt, new Object[0])).booleanValue();
return bool;
}
}
catch (Exception localException) {
Logger.e(TAG, "An exception occured while refreshing device");
}
return false;
}
/**
* 再接続処理
*/
private void bleGattReconnect() {
disconnect(false);
connect(mBleConnectDeviceType, mDeviceAddress);
}
} }
...@@ -878,7 +878,7 @@ public class ABVCheckContentViewActivity extends ABVContentViewActivity { ...@@ -878,7 +878,7 @@ public class ABVCheckContentViewActivity extends ABVContentViewActivity {
* 中心温度計の接続を切る * 中心温度計の接続を切る
*/ */
protected void bleManagerDisconnect() { protected void bleManagerDisconnect() {
bleManagerUtil.disconnect(); bleManagerUtil.disconnect(true);
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment