webentwicklung-frage-antwort-db.com.de

Bluetooth Smart (4.0)/GATT-Unterstützung in Android 4.0?

Ich versuche, mit modernen Android-Smartphones eine Möglichkeit zu finden, mit Bluetooth 4.0-Geräten (AKA Bluetooth Smart) zu arbeiten, und zwar mit dem HTC One V.

Wie ich verstanden habe, gibt es aufgrund von API-Einschränkungen einige Probleme bei der Verwendung des GATT-Profils auch in Android 4.0 mit Bluetooth 4.0-Hardware.

Ich habe gesehen, dass Motorola eine eigene API für BT LE veröffentlicht hat, bin mir aber nicht sicher, ob diese für andere Anbieter funktioniert. Mein Ziel ist es, universelle Unterstützung für alle Smartphones mit entsprechender Hardware zu erhalten.

Jeder Lösungsvorschlag wird sehr geschätzt.

Alexey

PS: Ja, ich habe Android API für HDP gesehen, aber es scheint nur mit "klassischen" Bluetooth-Geräten verwendet zu werden (keine energiesparenden, wie dies bei BT LE der Fall ist).

28
AlexeyVMP

Wie bereits bekannt ist, unterstützt 4.3 die BLE, ist aber vor allem auf Nexus-Geräten so kaputt. Meiner Meinung nach ist es nicht für die Produktion vorbereitet.

0
AlexeyVMP

Leider gibt es keine nativen Android-GATT-APIs, weil Android Bluetooth Low Energy derzeit überhaupt nicht unterstützt. Dies könnte sich in den kommenden Android-Releases ändern, aber heute integrieren Hersteller stattdessen Bluetooth-Stacks von Drittanbietern mit Low Energy-Support von Anbietern wie Qualcomm, Broadcom oder CSR. Diese verfügen über eigene APIs, die die Kompatibilität offensichtlich auf die Telefone beschränken, die den Stack dieses Herstellers verwenden. Die gute Nachricht ist, dass es auf anderen Plattformen wie iOS oder Windows 8 native GATT-BLE-APIs gibt sind gut unterstützt. Für Android müssen wir warten, bis Google die Linux/BlueZ-Arbeit, die auf BLE durchgeführt wurde, in Android integriert. 

26
introiboad

Nach einiger Recherche kann ich nur folgendes sagen:

  • Motorola hat sich mit Broadcom zusammengetan, um eine proprietäre API zu entwickeln. Es scheint, dass es äußerst begrenzt ist, da nur vorhandene Profile unterstützt werden. Checke es aus hier .

  • Samsung liefert keine Informationen zu seiner BLE-API, die ich überprüfen kann, ist vorhanden und heißt samsung.bluetoothle . Ich habe einige Apps von Google Play dekompiliert, die die BLE-Funktionen des SGSIII verwenden, und habe ein paar Methoden gefunden, die in der nativen BT-API von Android nicht vorhanden sind. Ich habe versucht, sie durch Java-Reflektion zu verwenden, und arbeite derzeit an der Möglichkeit, eine Bibliothek zu entwickeln. Aber Tests, die ich bisher durchgeführt habe, haben bestenfalls verwackelte Ergebnisse erzielt. Es gibt auch einen Thread in Samsungs Entwicklerforum, ich würde vorschlagen, etwas Druck auszuüben here , wenn Sie interessiert sind.

  • Google hat zu diesem Aspekt fast keine Bemerkungen gemacht. Es gibt einen thread zu diesem Thema im Galaxy Nexus, den Sie mit einem Stern markieren sollten, bei dem sich viele Leute beschweren. Das, was einer Antwort von Google am nächsten kommt, ist hier .

[UPDATE]

Samsung hat auch einige Android-Klassen geändert, insbesondere:

  • BluetoothAdapter
  • BluetoothDevice

[UPDATE]

Da ich dieses Problem wegen mangelnder Unterstützung sowohl von Google als auch von Samsung für eine Weile beiseite gelegt habe, werde ich das posten, was ich bisher gelernt habe:

BluetoothAdapter neue Methoden:

public boolean Android.bluetooth.BluetoothAdapter.leTestEnd()
public boolean Android.bluetooth.BluetoothAdapter.setAvStreaming(boolean)
public boolean Android.bluetooth.BluetoothAdapter.setScanLE(boolean)
public void Android.bluetooth.BluetoothAdapter.setScoPathChange(int)
public boolean Android.bluetooth.BluetoothAdapter.startLeDiscovery()

Um sie zu benutzen, mache folgendes:

BluetoothAdapter ba = new BluetoothAdapter();
Method starteLeDiscoveryMethod = null;
starteLeDiscoveryMethod = ba.class.getMethod("startLeDiscovery");
starteLeDiscoveryMethod.invoke(ba);

HINWEIS: Diese Methode funktioniert in gewisser Weise wie die normale startDiscovery()-Methode, aber zumindest für mich entdeckt sie das BLE-Gerät 2 von 5 mal. Und sich erinnern , dies ist nur für dasSGSIII. Ich bin nicht dazu gekommen, die neuen Methoden in BluetoothDevice zu extrahieren, aber wenn ich das tue, werde ich sie hier posten.

13
Moises Jimenez

SDK 18 hat jetzt Unterstützung dafür. Dokumente sind hier:

http://developer.Android.com/guide/topics/connectivity/bluetooth-le.html

Beim Testen meines Nexus 4 stürzt der Bluetooth-Stack ab.

2
Nick Palmer

HTC hat seit letztem Jahr BLE-Unterstützung mit HTC One X +, Droid DNA und natürlich dem HTC One. Ursprünglich war das HTC BLE-API auf Anfrage erhältlich, es ist jedoch jetzt unter http://htcdev.com kostenlos verfügbar. 

Ja, der neue Standard Android BLE API von Google in Android API Level 18 ist in Kürze verfügbar (siehe Vorschau von IO video). Sie können jedoch APIs von Drittanbietern (HTC, Samsung usw.) auf kompatible Weise umschließen Unterstützung der neuen Standard-API, da alle APIs das GATT-Profil (ähnlich wie IOS) ziemlich ähnlich unterstützen.

1
dljava
0
Palak