Basierend auf den aufgelisteten Diensten here, ich versuche, einen Dienst von einem Android-Gerät zu abonnieren, kann aber nicht die Aufforderung Teil arbeiten. Versucht, mit 7905F431-B5CE-4E99-A40F-4B1E122D00D0
zu werben, aber das Peripheriegerät wird nicht auf der iPhone-Liste der Bluetooth-Geräte angezeigt. Auch mit (LE) -Scan und Filtern gespielt, um den ANCS-Server ohne Glück zu entdecken. Irgendein Hinweis?Abonnieren ANCS auf Android
edit: Code
BleService.java
public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
boolean enabled) {
Log.d(TAG, "setCharacteristicNotification");
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString(SampleGattAttributes.DESCRIPTOR));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor)
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
}
}
SampleGattAttributes.java
public class SampleGattAttributes {
public static String ANCS_SERVICE = "7905F431-B5CE-4E99-A40F-4B1E122D00D0";
public static String NOTIFICATION_SOURCE = "9FBF120D-6301-42D9-8C58-25E699A21DBD";
public static String DATA_CONTROL = "22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB";
public static String DESCRIPTOR = "00002902-0000-1000-8000-00805f9b34fb";
}
MainActivity.java
private void displayServices(List<BluetoothGattService> services) {
for (BluetoothGattService service : services) {
if (service.getUuid().compareTo(UUID.fromString(ANCS_SERVICE)) == 0) {
for (BluetoothGattCharacteristic characteristic : service.getCharacteristics()) {
Log.d(TAG, "charac: " + characteristic.getUuid());
for (BluetoothGattDescriptor descriptor : characteristic.getDescriptors()) {
Log.d(TAG, "desc: " + descriptor.getUuid());
}
if (characteristic.getUuid().compareTo(UUID.fromString(NOTIFICATION_SOURCE)) == 0) {
bleService.setCharacteristicNotification(characteristic, true);
}
}
}
}
}
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BleService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
displayServices(bleService.getSupportedGattServices());
}
}
};
Update: Ich bin ein Nach der Verbindung mit einem auf dem iPhone beworbenen Dienst können Sie die Dienste und Merkmale finden. Das Abonnieren von Benachrichtigungen löst jedoch nach dem Empfang einer Benachrichtigung auf dem iPhone keine onCharacteristicChanged
aus.
update2: Alle Aufrufe von write descriptor.setValue
sind erfolgreich und werden nacheinander ausgeführt.
Update3: verwendete Teil des Codes aus this sample.
Update4: Testgeräte: Nexus 5X Android 6.0.1; iPhone 6S + iOS 10.3.1
update5: BT meldet
gut In Nexus-Geräten gehen In den Entwickleroptionen gibt es ein Kontrollkästchen, das "Enable Bluetooth HCI Snoop Log" ist. Wenn Sie es aktivieren, protokolliert das Gerät alles, was auf dem Bluetooth-Stack geschieht .... siehe Protokoll auf der SD-Karte namens "HCIsnoop.log". Wenn Sie Ihre Datei auf Ihrer Festplatte haben, laden Sie diese Software (kostenlos) herunter: http://www.fte.com/support/download.aspx?demo=ComProbe%20SD&type=capture&iid=1v, um diese BT-Protokolldatei anzuzeigen. Mit diesem können Sie jedes Paket sehen, das von einem Gerät zu einem anderen ausgetauscht wurde (wie ein Wireshark für BT). – PN10
Wie können Sie diese Anwendung auf Github veröffentlichen? Ein einfacher ANCS Android Client wäre erstaunlich – Jason