Example usage for android.bluetooth BluetoothDevice EXTRA_PREVIOUS_BOND_STATE

List of usage examples for android.bluetooth BluetoothDevice EXTRA_PREVIOUS_BOND_STATE

Introduction

In this page you can find the example usage for android.bluetooth BluetoothDevice EXTRA_PREVIOUS_BOND_STATE.

Prototype

String EXTRA_PREVIOUS_BOND_STATE

To view the source code for android.bluetooth BluetoothDevice EXTRA_PREVIOUS_BOND_STATE.

Click Source Link

Document

Used as an int extra field in #ACTION_BOND_STATE_CHANGED intents.

Usage

From source file:com.wolkabout.hexiwear.service.BluetoothService.java

@Receiver(actions = BluetoothDevice.ACTION_BOND_STATE_CHANGED)
void onBondStateChanged(Intent intent) {
    final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    final int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);
    final int previousBondState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, -1);

    Log.d(TAG, "Bond state changed for: " + device.getAddress() + " new state: " + bondState + " previous: "
            + previousBondState);// w w  w . ja va 2  s  .co  m

    if (bondState == BluetoothDevice.BOND_BONDED) {
        Log.i(TAG, "Bonded");
        createGATT(device);
    } else if (bondState == BluetoothDevice.BOND_NONE) {
        device.createBond();
    }
}

From source file:com.wolkabout.hexiwear.activity.MainActivity.java

@Receiver(actions = BluetoothDevice.ACTION_BOND_STATE_CHANGED)
void onBondStateChanged(Intent intent) {
    final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    final int previousBondState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, -1);
    final int newBondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);

    Log.d(TAG, device.getName() + "(" + device.getAddress() + ") changed state: " + previousBondState + " -> "
            + newBondState);/*from  www . j ava2s.  co  m*/
    adapter.notifyDataSetChanged();

    if (newBondState == BluetoothDevice.BOND_BONDED) {
        onBonded(device);
    } else if (previousBondState == BluetoothDevice.BOND_BONDING && newBondState == BluetoothDevice.BOND_NONE) {
        device.createBond();
    }
}

From source file:is.hello.buruberi.bluetooth.stacks.android.NativeGattPeripheral.java

@NonNull
@Override//  ww  w.  j ava  2s .  c o  m
@RequiresPermission(allOf = { Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, })
public Observable<GattPeripheral> createBond() {
    return createObservable(new Observable.OnSubscribe<GattPeripheral>() {
        @Override
        public void call(final Subscriber<? super GattPeripheral> subscriber) {
            if (getBondStatus() == BOND_BONDED) {
                logger.info(GattPeripheral.LOG_TAG, "Device already bonded, skipping.");

                subscriber.onNext(NativeGattPeripheral.this);
                subscriber.onCompleted();
                return;
            }

            final Subscription subscription = createBondReceiver().subscribe(new Subscriber<Intent>() {
                @Override
                public void onCompleted() {
                }

                @Override
                public void onError(Throwable e) {
                    subscriber.onError(e);
                }

                @Override
                public void onNext(Intent intent) {
                    final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
                            BluetoothDevice.ERROR);
                    final int previousState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE,
                            BluetoothDevice.ERROR);

                    logger.info(GattPeripheral.LOG_TAG,
                            "Bond status changed from " + BondException.getBondStateString(previousState)
                                    + " to " + BondException.getBondStateString(state));

                    if (state == BluetoothDevice.BOND_BONDED) {
                        logger.info(LOG_TAG, "Bonding succeeded.");

                        subscriber.onNext(NativeGattPeripheral.this);
                        subscriber.onCompleted();

                        unsubscribe();
                    } else if (state == BluetoothDevice.ERROR
                            || state == BOND_NONE && previousState == BOND_CHANGING) {
                        final int reason = intent.getIntExtra(BondException.EXTRA_REASON,
                                BondException.REASON_UNKNOWN_FAILURE);
                        logger.error(LOG_TAG,
                                "Bonding failed for reason " + BondException.getReasonString(reason), null);
                        subscriber.onError(new BondException(reason));

                        unsubscribe();
                    }
                }
            });

            if (!BluetoothDeviceCompat.createBond(bluetoothDevice)) {
                subscription.unsubscribe();
                subscriber.onError(new BondException(BondException.REASON_ANDROID_API_CHANGED));
            }
        }
    });
}

From source file:is.hello.buruberi.bluetooth.stacks.android.NativeGattPeripheral.java

@NonNull
@Override/*  www. j a  v a  2s .  c  o  m*/
@RequiresPermission(allOf = { Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, })
public Observable<GattPeripheral> removeBond(final @NonNull OperationTimeout timeout) {
    return createObservable(new Observable.OnSubscribe<GattPeripheral>() {
        @Override
        public void call(final Subscriber<? super GattPeripheral> subscriber) {
            if (getBondStatus() != BOND_BONDED) {
                logger.info(GattPeripheral.LOG_TAG, "Device not bonded, skipping.");

                subscriber.onNext(NativeGattPeripheral.this);
                subscriber.onCompleted();
                return;
            }

            final Subscription subscription = createBondReceiver().subscribe(new Subscriber<Intent>() {
                @Override
                public void onCompleted() {
                }

                @Override
                public void onError(Throwable e) {
                    subscriber.onError(e);
                }

                @Override
                public void onNext(Intent intent) {
                    timeout.reschedule();

                    final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
                            BluetoothDevice.ERROR);
                    final int previousState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE,
                            BluetoothDevice.ERROR);

                    logger.info(GattPeripheral.LOG_TAG,
                            "Bond status changed from " + BondException.getBondStateString(previousState)
                                    + " to " + BondException.getBondStateString(state));

                    if (state == BluetoothDevice.BOND_NONE) {
                        logger.info(LOG_TAG, "Removing bond succeeded.");
                        timeout.unschedule();

                        subscriber.onNext(NativeGattPeripheral.this);
                        subscriber.onCompleted();

                        unsubscribe();
                    } else if (state == BluetoothDevice.ERROR) {
                        timeout.unschedule();

                        final int reason = intent.getIntExtra(BondException.EXTRA_REASON,
                                BondException.REASON_UNKNOWN_FAILURE);
                        logger.error(LOG_TAG,
                                "Removing bond failed for reason " + BondException.getReasonString(reason),
                                null);
                        subscriber.onError(new BondException(reason));

                        unsubscribe();
                    }
                }
            });

            timeout.setTimeoutAction(new Action0() {
                @Override
                public void call() {
                    subscription.unsubscribe();

                    // This can happen in Lollipop
                    if (getBondStatus() == BOND_NONE) {
                        subscriber.onNext(NativeGattPeripheral.this);
                        subscriber.onCompleted();
                    } else {
                        subscriber.onError(new OperationTimeoutException(Operation.REMOVE_BOND));
                    }
                }
            }, stack.getScheduler());

            if (!BluetoothDeviceCompat.removeBond(bluetoothDevice)) {
                subscription.unsubscribe();
                subscriber.onError(new BondException(BondException.REASON_ANDROID_API_CHANGED));
            } else {
                timeout.schedule();
            }
        }
    });
}