Ответ 1
Изменить ответ на последний вопрос
Вы можете избежать использования намерения для поиска сопряженных устройств. При подключении к устройству, которое не спаривается, выдается уведомление о необходимости подключения устройств. После спаривания это сообщение не должно отображаться снова для этих устройств, соединение должно быть автоматическим (в соответствии с тем, как вы написали свою программу).
Я использую намерение включить bluetooth, и чтобы мое устройство было доступно для обнаружения, я затем установил свой код для подключения и нажмите кнопку для подключения. В вашем случае вам нужно будет убедиться, что ваши аксессуары также доступны для поиска. В моем случае я использую уникальный UUID, и оба устройства должны признать это для соединения. Это можно использовать только в том случае, если вы программируете оба устройства, независимо от того, являются ли они андроидом или одним андроидом и другим типом устройства.
Попробуйте это и посмотрите, разрешает ли он вашу проблему.
Это ответ на исходный вопрос, прежде чем он был изменен, чтобы стать другим вопросом.
Я отредактировал свой ответ для ясности, как я вижу из комментариев, которые вводят в заблуждение. Ваш вопрос состоит из двух частей.
В моем MotoG (KitKat), если я переверну свой Bluetooth, он автоматически подключается к устройству (если оно близко и сопряжено с...), но на моем LG G3 мне нужно идти к Конфигурации/Bluetooth/Сопряженные устройства/и нажмите на устройство, чтобы connect... и я хочу избежать этого... должно быть возможно?
Это проблема программирования и проблема с платформой.
В Android 5.0 имеется хорошо документированная ошибка, поскольку Bluetooth не подключается автоматически и многие другие проблемы с BT. Эти проблемы продолжаются со всеми обновлениями 5.0. версии и не фиксируется до 5.1. Обновить.
http://www.digitaltrends.com/mobile/android-lollipop-problems/11/
http://forums.androidcentral.com/lg-g3/473064-bluetooth-streaming-choppy-lg-3-lollipop.html
Первый порт вызова - обновить до 5.1
Эти проблемы были рассмотрены в обновлении Lollipop 5.1
http://www.reddit.com/r/Android/comments/306m3y/lollipop_51_bluetooth/
Edit: Я не думаю, что это исправит вашу проблему автоматического спаривания, вы хотели бы знать, как использовать BTGatt.
Я видел, если я набираю устройство. проверить, что я могу сделать это, позвольте мне connectGatt() означает /.../ Но я не могу понять, как это сделать...
Использовать BluetoothGatt
https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html
Этот класс предоставляет функциональность Bluetooth GATT для включения связь с устройствами Bluetooth Smart или Smart Ready. /.../ Устройства, поддерживающие GATT, могут быть обнаружены с помощью устройства Bluetooth обнаружения или BLE-сканирования.
https://developer.android.com/reference/android/bluetooth/BluetoothGattCallback.html
Вот отличный пример использования BluetoothGatt (он использует скорость прослушивания):
https://github.com/googlesamples/android-BluetoothLeGatt/blob/master/Application/src/main/java/com/example/android/bluetoothlegatt/BluetoothLeService.java
Я воспроизвел часть кода здесь, в случае, если ссылка замирает.
В основном это соответствует аналогичным строкам обычного соединения Bluetooth. Вам необходимо найти и найти поддерживаемые устройства.
Состояние монитора и т.д.
Это две наиболее подходящие функции для gatt.
Обратный вызов:
// Implements callback methods for GATT events that the app cares about. For example,
// connection change and services discovered.
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
String intentAction;
if (newState == BluetoothProfile.STATE_CONNECTED) {
intentAction = ACTION_GATT_CONNECTED;
mConnectionState = STATE_CONNECTED;
broadcastUpdate(intentAction);
Log.i(TAG, "Connected to GATT server.");
// Attempts to discover services after successful connection.
Log.i(TAG, "Attempting to start service discovery:" +
mBluetoothGatt.discoverServices());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
intentAction = ACTION_GATT_DISCONNECTED;
mConnectionState = STATE_DISCONNECTED;
Log.i(TAG, "Disconnected from GATT server.");
broadcastUpdate(intentAction);
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
} else {
Log.w(TAG, "onServicesDiscovered received: " + status);
}
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}
};
Трансляция:
private void broadcastUpdate(final String action,
final BluetoothGattCharacteristic characteristic) {
final Intent intent = new Intent(action);
// This is special handling for the Heart Rate Measurement profile. Data parsing is
// carried out as per profile specifications:
// http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml
if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
int flag = characteristic.getProperties();
int format = -1;
if ((flag & 0x01) != 0) {
format = BluetoothGattCharacteristic.FORMAT_UINT16;
Log.d(TAG, "Heart rate format UINT16.");
} else {
format = BluetoothGattCharacteristic.FORMAT_UINT8;
Log.d(TAG, "Heart rate format UINT8.");
}
final int heartRate = characteristic.getIntValue(format, 1);
Log.d(TAG, String.format("Received heart rate: %d", heartRate));
intent.putExtra(EXTRA_DATA, String.valueOf(heartRate));
} else {
// For all other profiles, writes the data formatted in HEX.
final byte[] data = characteristic.getValue();
if (data != null && data.length > 0) {
final StringBuilder stringBuilder = new StringBuilder(data.length);
for(byte byteChar : data)
stringBuilder.append(String.format("%02X ", byteChar));
intent.putExtra(EXTRA_DATA, new String(data) + "\n" + stringBuilder.toString());
}
}
sendBroadcast(intent);
}
В этом вопросе также есть соответствующий код, который может помочь сократить его при обучении:
Bluetooth-звонок Gatt не работает с новым API для Lollipop
Теперь вот руб. Являются ли ваши устройства bluetooth умными или умными?
Эта ссылка дает отличный список интеллектуальных устройств. Вы также узнаете, когда реализуете свою программу.
http://www.bluetooth.com/Pages/Bluetooth-Smart-Devices-List.aspx