Java Code Examples for android.bluetooth.BluetoothGatt#STATE_DISCONNECTED
The following examples show how to use
android.bluetooth.BluetoothGatt#STATE_DISCONNECTED .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: BleManager.java From Android-nRF-Toolbox with BSD 3-Clause "New" or "Revised" License | 6 votes |
/** * Disconnects from the device or cancels the pending connection attempt. Does nothing if device was not connected. * @return true if device is to be disconnected. False if it was already disconnected. */ public boolean disconnect() { userDisconnected = true; initialConnection = false; if (bluetoothGatt != null) { connectionState = BluetoothGatt.STATE_DISCONNECTING; callbacks.onDeviceDisconnecting(bluetoothGatt.getDevice()); final boolean wasConnected = connected; bluetoothGatt.disconnect(); if (!wasConnected) { // There will be no callback, the connection attempt will be stopped connectionState = BluetoothGatt.STATE_DISCONNECTED; callbacks.onDeviceDisconnected(bluetoothGatt.getDevice()); } return true; } return false; }
Example 2
Source File: MainActivity.java From BTLETest with MIT License | 6 votes |
@Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { super.onConnectionStateChange(gatt, status, newState); if (newState == BluetoothGatt.STATE_CONNECTED) { writeLine("Connected!"); // Discover services. if (!gatt.discoverServices()) { writeLine("Failed to start discovering services!"); } } else if (newState == BluetoothGatt.STATE_DISCONNECTED) { writeLine("Disconnected!"); } else { writeLine("Connection state changed. New state: " + newState); } }
Example 3
Source File: BLeSerialPortService.java From Android-BLE-Terminal with MIT License | 6 votes |
@Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { super.onConnectionStateChange(gatt, status, newState); if (newState == BluetoothGatt.STATE_CONNECTED) { if (status == BluetoothGatt.GATT_SUCCESS) { // Connected to device, start discovering services. if (!gatt.discoverServices()) { // Error starting service discovery. connectFailure(); } } else { // Error connecting to device. connectFailure(); } } else if (newState == BluetoothGatt.STATE_DISCONNECTED) { // Disconnected, notify callbacks of disconnection. rx = null; tx = null; notifyOnDisconnected(context); } }
Example 4
Source File: BleManager.java From thunderboard-android with Apache License 2.0 | 6 votes |
private void closeGatt() { if (gatt != null) { Timber.d("gatt device: %s, connected devices: %d", gatt.getDevice().getAddress(), bluetoothManager.getConnectedDevices(BluetoothProfile.GATT).size()); ThunderBoardDevice device = getDeviceFromCache(gatt.getDevice().getAddress()); if (device != null) { device.clear(); } if (BluetoothGatt.STATE_DISCONNECTED == bluetoothManager.getConnectionState(gatt.getDevice(), BluetoothProfile.GATT)) { Timber.d("close"); gatt.close(); } else { Timber.d("disconnect"); gatt.disconnect(); } gatt = null; } for (int i = 0; i < devices.size(); i++) { Timber.d("device: %s", devices.get(i).getAddress()); } }
Example 5
Source File: DeviceMirror.java From BLE with Apache License 2.0 | 6 votes |
/** * 连接状态改变,主要用来分析设备的连接与断开 * @param gatt GATT * @param status 改变前状态 * @param newState 改变后状态 */ @Override public void onConnectionStateChange(final BluetoothGatt gatt, final int status, final int newState) { ViseLog.i("onConnectionStateChange status: " + status + " ,newState: " + newState + " ,thread: " + Thread.currentThread()); if (newState == BluetoothGatt.STATE_CONNECTED) { gatt.discoverServices(); } else if (newState == BluetoothGatt.STATE_DISCONNECTED) { close(); if (connectCallback != null) { if (handler != null) { handler.removeCallbacksAndMessages(null); } ViseBle.getInstance().getDeviceMirrorPool().removeDeviceMirror(deviceMirror); if (status == BluetoothGatt.GATT_SUCCESS) { connectState = ConnectState.CONNECT_DISCONNECT; connectCallback.onDisconnect(isActiveDisconnect); } else { connectState = ConnectState.CONNECT_FAILURE; connectCallback.onConnectFailure(new ConnectException(gatt, status)); } } } else if (newState == BluetoothGatt.STATE_CONNECTING) { connectState = ConnectState.CONNECT_PROCESS; } }
Example 6
Source File: BleProfileService.java From Android-nRF-Toolbox with BSD 3-Clause "New" or "Revised" License | 5 votes |
/** * Disconnects from the sensor. */ public final void disconnect() { final int state = bleManager.getConnectionState(); if (state == BluetoothGatt.STATE_DISCONNECTED || state == BluetoothGatt.STATE_DISCONNECTING) { bleManager.close(); onDeviceDisconnected(bluetoothDevice); return; } bleManager.disconnect().enqueue(); }
Example 7
Source File: P_NativeDeviceWrapper.java From SweetBlue with GNU General Public License v3.0 | 5 votes |
public int getNativeConnectionState() { //--- > RB If BT has been turned off quickly (for instance, there are many devices connected, then you go into BT settings and run a scan), then // we obviously won't be able to get a state. We return DISCONNECTED here for obvious reasons. if (getManager().m_config.nativeManagerLayer.isBluetoothEnabled()) { return m_device.layerManager().getManagerLayer().getConnectionState(m_device_native, BluetoothGatt.GATT_SERVER); } else { return BluetoothGatt.STATE_DISCONNECTED; } }
Example 8
Source File: Peripheral.java From ble-test-peripheral-android with Apache License 2.0 | 5 votes |
@Override public void onConnectionStateChange(BluetoothDevice device, final int status, int newState) { super.onConnectionStateChange(device, status, newState); if (status == BluetoothGatt.GATT_SUCCESS) { if (newState == BluetoothGatt.STATE_CONNECTED) { mBluetoothDevices.add(device); updateConnectedDevicesStatus(); Log.v(TAG, "Connected to device: " + device.getAddress()); } else if (newState == BluetoothGatt.STATE_DISCONNECTED) { mBluetoothDevices.remove(device); updateConnectedDevicesStatus(); Log.v(TAG, "Disconnected from device"); } } else { mBluetoothDevices.remove(device); updateConnectedDevicesStatus(); // There are too many gatt errors (some of them not even in the documentation) so we just // show the error to the user. final String errorMessage = getString(R.string.status_errorWhenConnecting) + ": " + status; runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(Peripheral.this, errorMessage, Toast.LENGTH_LONG).show(); } }); Log.e(TAG, "Error when connecting: " + status); } }
Example 9
Source File: P_NativeDeviceWrapper.java From AsteroidOSSync with GNU General Public License v3.0 | 5 votes |
public int getNativeConnectionState() { //--- > RB If BT has been turned off quickly (for instance, there are many devices connected, then you go into BT settings and run a scan), then // we obviously won't be able to get a state. We return DISCONNECTED here for obvious reasons. if (getManager().m_config.nativeManagerLayer.isBluetoothEnabled()) { return m_device.layerManager().getManagerLayer().getConnectionState(m_device_native, BluetoothGatt.GATT_SERVER); } else { return BluetoothGatt.STATE_DISCONNECTED; } }
Example 10
Source File: LightActivity.java From EFRConnect-android with Apache License 2.0 | 5 votes |
@Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { super.onConnectionStateChange(gatt, status, newState); if (newState == BluetoothGatt.STATE_DISCONNECTED || newState == BluetoothGatt.STATE_DISCONNECTING) { runOnUiThread(new Runnable() { @Override public void run() { disconnectWithModal(); } }); } }
Example 11
Source File: GattClient.java From bean-sdk-android with MIT License | 5 votes |
@Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { if (status != BluetoothGatt.GATT_SUCCESS) { if (getOADProfile().uploadInProgress()) { // Since an OAD update is currently in progress, only alert the OAD Profile // of the Bean disconnecting, not the ConnectionListener(s) getOADProfile().onBeanConnectionFailed(); } else { connectionListener.onConnectionFailed(); } mConnected = false; return; } if (newState == BluetoothGatt.STATE_CONNECTED) { mConnected = true; // Bean is connected, before alerting the ConnectionListener(s), we must // discover available services (lookup GATT table). Log.i(TAG, "Discovering Services!"); mGatt.discoverServices(); } if (newState == BluetoothGatt.STATE_DISCONNECTED) { mOperationsQueue.clear(); mOperationInProgress = false; mConnected = false; connectionListener.onDisconnected(); for (BaseProfile profile : mProfiles) { profile.onBeanDisconnected(); } } }
Example 12
Source File: Device.java From neatle with MIT License | 5 votes |
private void connectionFailed(int status) { BluetoothGattCallback current; int oldState; int newState; LinkedList<BluetoothGattCallback> queueCopy; BluetoothGatt oldGatt; synchronized (lock) { oldState = state; state = BluetoothGatt.STATE_DISCONNECTED; newState = state; serviceDiscovered = false; current = currentCallback; queueCopy = new LinkedList<>(queue); oldGatt = this.gatt; this.gatt = null; } NeatleLogger.i("Connection attempt failed. Notifying all pending operations"); current.onConnectionStateChange(oldGatt, status, BluetoothGatt.STATE_DISCONNECTED); for (BluetoothGattCallback cb : queueCopy) { cb.onConnectionStateChange(oldGatt, status, BluetoothGatt.STATE_DISCONNECTED); } notifyConnectionStateChange(oldState, newState); }
Example 13
Source File: BleManager.java From Android-nRF-Toolbox with BSD 3-Clause "New" or "Revised" License | 5 votes |
private void notifyDeviceDisconnected(final BluetoothDevice device) { connected = false; connectionState = BluetoothGatt.STATE_DISCONNECTED; if (userDisconnected) { callbacks.onDeviceDisconnected(device); close(); } else { callbacks.onLinklossOccurred(device); // We are not closing the connection here as the device should try to reconnect automatically. // This may be only called when the shouldAutoConnect() method returned true. } if (profile != null) profile.release(); }
Example 14
Source File: BleManagerHandler.java From Android-BLE-Library with BSD 3-Clause "New" or "Revised" License | 5 votes |
private void notifyDeviceDisconnected(@NonNull final BluetoothDevice device, final int status) { final boolean wasConnected = connected; connected = false; servicesDiscovered = false; serviceDiscoveryRequested = false; deviceNotSupported = false; initInProgress = false; connectionState = BluetoothGatt.STATE_DISCONNECTED; checkCondition(); if (!wasConnected) { log(Log.WARN, "Connection attempt timed out"); close(); postCallback(c -> c.onDeviceDisconnected(device)); postConnectionStateChange(o -> o.onDeviceFailedToConnect(device, status)); // ConnectRequest was already notified } else if (userDisconnected) { log(Log.INFO, "Disconnected"); close(); postCallback(c -> c.onDeviceDisconnected(device)); postConnectionStateChange(o -> o.onDeviceDisconnected(device, status)); final Request request = this.request; if (request != null && request.type == Request.Type.DISCONNECT) { request.notifySuccess(device); } } else { log(Log.WARN, "Connection lost"); postCallback(c -> c.onLinkLossOccurred(device)); postConnectionStateChange(o -> o.onDeviceDisconnected(device, ConnectionObserver.REASON_LINK_LOSS)); // We are not closing the connection here as the device should try to reconnect // automatically. // This may be only called when the shouldAutoConnect() method returned true. } onDeviceDisconnected(); }
Example 15
Source File: H7ConnectThread.java From PolarHeartRateApplication with MIT License | 5 votes |
@Override public void onConnectionStateChange(final BluetoothGatt gatt, final int status, final int newState) { if (newState == BluetoothGatt.STATE_DISCONNECTED) { Log.e("H7ConnectThread", "device Disconnected"); ac.connectionError(); } else{ gatt.discoverServices(); Log.d("H7ConnectThread", "Connected and discovering services"); } }
Example 16
Source File: DfuBaseService.java From microbit with Apache License 2.0 | 4 votes |
@Override public void onConnectionStateChange(final BluetoothGatt gatt, final int status, final int newState) { // Check whether an error occurred logi("onConnectionStateChange() :: Start"); if (status == BluetoothGatt.GATT_SUCCESS) { if (newState == BluetoothGatt.STATE_CONNECTED) { logi("onConnectionStateChange() :: Connected to GATT server"); mConnectionState = STATE_CONNECTED; /* * The onConnectionStateChange callback is called just after establishing connection and before sending Encryption Request BLE event in case of a paired device. * In that case and when the Service Changed CCCD is enabled we will get the indication after initializing the encryption, about 1600 milliseconds later. * If we discover services right after connecting, the onServicesDiscovered callback will be called immediately, before receiving the indication and the following * service discovery and we may end up with old, application's services instead. * * This is to support the buttonless switch from application to bootloader mode where the DFU bootloader notifies the master about service change. * Tested on Nexus 4 (Android 4.4.4 and 5), Nexus 5 (Android 5), Samsung Note 2 (Android 4.4.2). The time after connection to end of service discovery is about 1.6s * on Samsung Note 2. * * NOTE: We are doing this to avoid the hack with calling the hidden gatt.refresh() method, at least for bonded devices. */ if (gatt.getDevice().getBondState() == BluetoothDevice.BOND_BONDED) { try { synchronized (this) { logd("onConnectionStateChange() :: Waiting 1600 ms for a possible Service Changed indication..."); wait(1600); // After 1.6s the services are already discovered so the following gatt.discoverServices() finishes almost immediately. // NOTE: This also works with shorted waiting time. The gatt.discoverServices() must be called after the indication is received which is // about 600ms after establishing connection. Values 600 - 1600ms should be OK. } } catch (InterruptedException e) { Log.e(TAG, e.toString()); // Do nothing } } // Attempts to discover services after successful connection. final boolean success = gatt.discoverServices(); logi("onConnectionStateChange() :: Attempting to start service discovery... " + (success ? "succeed" : "failed")); if (!success) { mError = ERROR_SERVICE_DISCOVERY_NOT_STARTED; } else { // Just return here, lock will be notified when service discovery finishes return; } } else if (newState == BluetoothGatt.STATE_DISCONNECTED) { logi("onConnectionStateChange() :: Disconnected from GATT server"); mPaused = false; mConnectionState = STATE_DISCONNECTED; } } else { loge("Connection state change error: " + status + " newState: " + newState); /* if (newState == BluetoothGatt.STATE_DISCONNECTED) { mConnectionState = STATE_DISCONNECTED; if (mServicePhase == PAIRING_REQUEST ){ mServicePhase = PAIRING_FAILED ; updateProgressNotification(status); } }*/ mPaused = false; mError = ERROR_CONNECTION_STATE_MASK | status; } // Notify waiting thread synchronized (mLock) { mLock.notifyAll(); } }
Example 17
Source File: P_NativeDeviceWrapper.java From AsteroidOSSync with GNU General Public License v3.0 | 4 votes |
private int performGetNativeState(AtomicInteger state, CountDownLatch latch) { final int reportedNativeConnectionState = getNativeConnectionState(); int connectedStateThatWeWillGoWith = reportedNativeConnectionState; if( m_nativeConnectionState != null && m_nativeConnectionState.get() != -1 ) { if( m_nativeConnectionState.get() != reportedNativeConnectionState ) { getLogger().e("Tracked native state " + getLogger().gattConn(m_nativeConnectionState.get()) + " doesn't match reported state " + getLogger().gattConn(reportedNativeConnectionState) + "."); } connectedStateThatWeWillGoWith = m_nativeConnectionState.get(); } if( connectedStateThatWeWillGoWith != BluetoothGatt.STATE_DISCONNECTED ) { if( gattLayer().isGattNull() ) { //--- DRK > Can't assert here because gatt can legitmately be null even though we have a connecting/ed native state. //--- This was observed on the moto G right after app start up...getNativeConnectionState() reported connecting/ed //--- but we haven't called connect yet. Really rare...only seen once after 4 months. if( m_nativeConnectionState == null ) { getLogger().e("Gatt is null with " + getLogger().gattConn(connectedStateThatWeWillGoWith)); connectedStateThatWeWillGoWith = BluetoothGatt.STATE_DISCONNECTED; getManager().uhOh(UhOh.CONNECTED_WITHOUT_EVER_CONNECTING); } else { getManager().ASSERT(false, "Gatt is null with tracked native state: " + getLogger().gattConn(connectedStateThatWeWillGoWith)); } } } else { //--- DRK > Had this assert here but must have been a brain fart because we can be disconnected //--- but still have gatt be not null cause we're trying to reconnect. // if( !m_mngr.ASSERT(m_gatt == null) ) // { // m_logger.e(m_logger.gattConn(connectedStateThatWeWillGoWith)); // } } if (state != null) { state.set(connectedStateThatWeWillGoWith); } if (latch != null) { latch.countDown(); } return connectedStateThatWeWillGoWith; }
Example 18
Source File: BleMulticonnectProfileService.java From Android-nRF-Toolbox with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * Returns the connection state of given device. * @param device the target device * @return the connection state, as in {@link BleManager#getConnectionState()}. */ @SuppressWarnings("unused") public final int getConnectionState(final BluetoothDevice device) { final BleManager manager = bleManagers.get(device); return manager != null ? manager.getConnectionState() : BluetoothGatt.STATE_DISCONNECTED; }
Example 19
Source File: P_NativeDeviceWrapper.java From SweetBlue with GNU General Public License v3.0 | 4 votes |
private int performGetNativeState(AtomicInteger state, CountDownLatch latch) { final int reportedNativeConnectionState = getNativeConnectionState(); int connectedStateThatWeWillGoWith = reportedNativeConnectionState; if( m_nativeConnectionState != null && m_nativeConnectionState.get() != -1 ) { if( m_nativeConnectionState.get() != reportedNativeConnectionState ) { getLogger().e("Tracked native state " + getLogger().gattConn(m_nativeConnectionState.get()) + " doesn't match reported state " + getLogger().gattConn(reportedNativeConnectionState) + "."); } connectedStateThatWeWillGoWith = m_nativeConnectionState.get(); } if( connectedStateThatWeWillGoWith != BluetoothGatt.STATE_DISCONNECTED ) { if( gattLayer().isGattNull() ) { //--- DRK > Can't assert here because gatt can legitmately be null even though we have a connecting/ed native state. //--- This was observed on the moto G right after app start up...getNativeConnectionState() reported connecting/ed //--- but we haven't called connect yet. Really rare...only seen once after 4 months. if( m_nativeConnectionState == null ) { getLogger().e("Gatt is null with " + getLogger().gattConn(connectedStateThatWeWillGoWith)); connectedStateThatWeWillGoWith = BluetoothGatt.STATE_DISCONNECTED; getManager().uhOh(UhOh.CONNECTED_WITHOUT_EVER_CONNECTING); } else { getManager().ASSERT(false, "Gatt is null with tracked native state: " + getLogger().gattConn(connectedStateThatWeWillGoWith)); } } } else { //--- DRK > Had this assert here but must have been a brain fart because we can be disconnected //--- but still have gatt be not null cause we're trying to reconnect. // if( !m_mngr.ASSERT(m_gatt == null) ) // { // m_logger.e(m_logger.gattConn(connectedStateThatWeWillGoWith)); // } } if (state != null) { state.set(connectedStateThatWeWillGoWith); } if (latch != null) { latch.countDown(); } return connectedStateThatWeWillGoWith; }
Example 20
Source File: Node.java From BlueSTSDK_Android with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * if we are connecting it start to scan the device service/characteristics otherwise it * change the node status to idle or unreachable. * if there is an error the node status go to dead * @param gatt connection with the device * @param status command status * @param newState new node status */ @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState){ Log.d(TAG,"Node: "+Node.this.getName()+" Status: "+status+" newState: " + ""+newState+" boundState:"+mDevice.getBondState()); if(status==BluetoothGatt.GATT_SUCCESS){ if(newState==BluetoothGatt.STATE_CONNECTED){ if (!isPairing()) { //if it is pairing we do it when it finish //wait a bit for see if we will do the secure pairing or not, //if the device will be in pair status the scan is aborted and will be //done when the pairing will be completed mBleThread.postDelayed(mScanServicesTask, RETRY_COMMAND_DELAY_MS); }//if !pairing }else if (newState == BluetoothGatt.STATE_DISCONNECTED){ //if the auto connect is on, avoid to close and free resources if(!mConnectionOption.enableAutoConnect()) { if (mConnection != null) { if(mConnectionOption.resetCache()) refreshDeviceCache(mConnection); if (mGattServer != null) { mGattServer.disconnect(); } mConnection.close(); }//if cleanConnectionData(); } if (mUserAskToDisconnect){ //disconnect completed Node.this.updateNodeStatus(State.Idle); }else{ //we disconnect but the user didn't ask it Node.this.updateNodeStatus(State.Unreachable); }//if else }//if-else }else{ //https://stackoverflow.com/questions/33718807/forcefully-turning-off-ble-device-connected-to-android-app-fires-onconnectionsta if(status==8 && // 8 = link lost newState == BluetoothGatt.STATE_DISCONNECTED && mConnectionOption.enableAutoConnect()){ Node.this.updateNodeStatus(State.Unreachable); return; } //close & clean the dead connection if(mConnection!=null) { if (mGattServer != null) { mGattServer.disconnect(); } mConnection.close(); }//if cleanConnectionData(); //notify to the user Node.this.updateNodeStatus(State.Dead); }//if status }