Articles of bluetooth lowenergy

Android KitKat是否允许支持蓝牙LE的设备充当外围设备?

直到Android 4.3,支持蓝牙低功耗的Android设备才能充当中央设备。 正如在Android 4.3蓝牙LE文档中给出的那样: Android 4.3(API Level 18)在中心角色中引入了对Bluetooth Low Energy的内置平台支持,并提供了应用程序可用于发现设备,查询服务和读/写特征的API。 随着Android 4.4 KitKat的推出,它现在也可以作为外围设备使用吗? 我找不到任何文件。 如果没有,那么我们是否必须等待Android 4.5才能在Android设备上获得BTLE外设模式? 或者有没有其他方法可以使Android设备充当外围设备?

在Android上同时与多个BLE设备进行稳健通信

虽然使用Android BLE apis的无证,传统智慧是某些操作,如读/写特征和描述符应该一次一个(尽管有些设备比其他设备更宽松)。 但是,我不清楚此策略是仅应用于单个连接还是应用于所有活动连接。 我听说最好一次启动一个设备连接。 这可能是应该在所有设备之间串行执行的操作(connect / connectGatt)的示例。 但对于其他操作,如读写特性,如果每个连接串行执行操作,或者我是否需要在所有设备之间共享一些全局操作队列,以便在所有设备之间只执行一个操作,它是否足够好?

本机Android BLE实现本质上是同步的吗?

我记得在“指南和提示”中读到了-Doc到三星BLE API(存档页面) : 三星F / W和堆栈最重要的概念之一是它的同步特性 。 也就是说,如果我们为特定特征调用writeCharacteristic ,如果它返回true ,则在接收到onCharacteristicRead回调之后,应该对任何BluetoothGatt或BluetoothGattServer方法进行下一次调用。 这是因为堆栈被设计为一次只支持和处理一个GATT调用,例如,如果在第一个调用后很快就调用writeCharacteristic或readCharacteristic ,它将被忽略。 这是否也适用于Android 4.3中引入的BLE的nativ实现? Samsung API一次只支持一个连接的GATT设备。 这在原生API中发生了变化吗?

Android模拟器上的蓝牙低功耗

我研究了蓝牙低功耗 。 但我没有支持BLE设备进行测试。 因此,我想问: Android模拟器是否支持BLEfunction进行测试? 我在Android Emulator 4.3(x86)和Android Emulator 4.4(ARM)上尝试使用以下代码: // Use this check to determine whether BLE is supported on the device. Then // you can selectively disable BLE-related features. if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show(); finish(); } 它总是显示“ble_not_supported” 。 另一个问题是 另一个模拟器或工具支持Android的BLE? 我真的想在模拟器上测试BLEfunction。

从G-Shock手表蓝牙android获取UUID

我正在研究Android中的蓝牙低功耗。 我希望在设备配对时获取远程设备的UUIDs 。 我发现BluetoothDevice.getUuids()将提供远程设备的UUIDs 。 我在ICS的设置应用程序中使用过它。 我能够获得经典设备和加密狗的UUIDs ,这是一种低能耗设备。 但是我无法获得低能耗的卡西欧手表的UUIDs 。 你能帮我解决这个问题吗?

Android Lollipop 5.0蓝牙低功耗核心角色的糟糕表现

自从Android 5.0 Lollipop最近发布以来,我在Nexus 4设备中遇到了蓝牙低功耗API的非常糟糕的性能。 使用之前的操作系统版本(Android 4.4.4 Kit-Kat),它就像一个魅力,在5.0上运行的相同应用程序具有以下行为: 通常它不会检测来自外围设备的任何广告包。 外围设备的ADVERTISING_INTERVAL是20ms,因此应用程序应该在最坏的情况下在60ms内检测到至少一个广告。 我尝试使用BluetoothLeScanner (使用SCAN_MODE_LOW_LATENCY设置)不使用已弃用的mBluetoothAdapter.startLeScan(mLeScanCallback)没有成功。 当它发生时,当我尝试连接到GATT服务器时,很少这样做。 我已经使用BLE嗅探器检查了CONNECTION_REQUEST数据包是否甚至没有发送到外设。 看来我不是唯一一个有这种错误的人,而其他一些用户也发布了类似的问题 。 有人知道发生了什么吗? – 更新1: (2014/12/17) 我还使用运行Lollipop的Nexus 5测试了相同的应用程序,它很少连接到GATT服务器。 每次发送连接请求时,它都不会发生,因为外围设备没有收到数据包。 在将此Nexus 5升级到Lollipop之前,它在Kit-Kat 4.4.4上完美运行。 更新2: (2014/12/17) Android 5.0.1根本无法解决问题。 更新3: (2015/04/23) Android 5.1也没有解决问题。 今天我有机会在SAMSUNG Galaxy S4上测试Android 5.0.1,它运行得很好。 我还在Nexus 5上测试了一个全新的Android 5.1安装,它也可以正常工作。 问题仍然存在于Nexus 4.他们在Android 5.0和后续版本的固件上做了一些奇怪的事情,破坏了Android 4.4.4与蓝牙API的完美兼容性。

如何通过蓝牙低功耗(BLE)链路发送数据?

我能够发现,连接到蓝牙。 源代码 – – 通过蓝牙连接到远程设备: //Get the device by its serial number bdDevice = mBluetoothAdapter.getRemoteDevice(blackBox); //for ble connection bdDevice.connectGatt(getApplicationContext(), true, mGattCallback); Gatt CallBack for Status: private BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { //Connection established if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) { //Discover services […]

BLE Android – 未调用onConnectionStateChange

我在尝试连接外围设备时遇到问题。 有时在BluetoothDevice#connectGatt(…)之后不会调用回调onConnectionStateChange(…) BluetoothDevice#connectGatt(…) 。 我想要实现的是用户操作触发的快速和短连接。 这种情况大约发生在10次中,没有特定的事先行动。 它持续约20至30秒,或直到应用程序被杀死并重新打开。 我遵循的正常步骤顺序是: 扫描设备以查找外围设备。 调用BluetoothDevice#connectGatt(…) 。 如果连接时间超过1秒,则意味着连接“卡住”,因此无法连接,因此再次调用BluetoothDevice#connectGatt(…) 。 这样做的次数限制为5次。 使用newState CONNECTED调用onConnectionStateChange(…)并开始服务发现。 其余的操作没有问题。 断开连接后,会调用BluetoothGatt#close() 。 发生的问题是在第3点。有时onConnectionStateChange(…)没有被调用。 我注意到大多数时候问题都是从特定的行为开始的。 在BluetoothDevice#connectGatt(…) ,使用newState CONNECTED调用onConnectionStateChange(…) ,但在newStatus DISCONNECTED之后几乎立即(~40毫秒)再次调用。 由于状态改变的时间很短,我可以推断设备甚至没有尝试建立连接并将状态更改为DISCONNECTED。 问题在以下时间结束: 20-30秒过去了。 在此期间,永远不会调用onConnectionStateChange(…) 。 问题结束时, onConnectionStateChange(…)被称为应用程序尝试连接的次数。 例如,如果BluetoothDevice#connectGatt(…)被调用15次,则onConnectionStateChange(…)被调用15次,其中newState等于DISCONNECTED。 这很奇怪,因为在任何连接尝试中都没有将状态更改为CONNECTED。 应用程序被杀死并重新启动。 SDK18和SDK 21中发生此错误。 @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) { String deviceName = device.getName(); if (deviceName […]

BLE蓝牙低功耗设备中的身份validation问题

我们正在制造一个带有BLE接口的物联网设备,它使用HM-11( http://www.seeedstudio.com/wiki/Bluetooth_V4.0_HM-11_BLE_Module )分线板托管芯片CC2541( http://www.ti。 com / product / CC2541 )。 validation方法设置为2:Auth with PIN 显示可用身份validation模式的数据表中的剪辑如下: 63. Query/Set Module Bond Mode Send Receive Parameter AT+TYPE? OK+Get:[para1] None AT+TYPE[para1] OK+Set:[para1] Para1: 0~2 0:Not need PIN Code 1:Auth not need PIN 2:Auth with PIN 3:Auth and bond Default: 0 对于低于Android 5.0版本的设备,它可以正常工作。 然而 对于Android版本5.0的设备,配对对话框显示没有diaplyed-pin或pin-enter-field,当单击pair按钮时,它无法配对 – 抱怨 由于PIN或密钥不正确,无法与MyApp配对。 对于使用Android 5.1版的设备,它甚至不会显示配对对话框,也无法配对。 注意:尝试重启设备,忘记设备,清除设备的绑定信息。 […]

订阅BLE Gatt通知Android

我正在开发一个BLE应用程序,基于谷歌提供的Gatt示例项目: https : //developer.android.com/samples/BluetoothLeGatt/index.html 。 因此,我可以成功地发送数据写入特征。 现在我需要知道这个特征何时会改变它的价值。 我知道我需要实现setCharacteristicNotification()方法和onDescriptorWrite()方法。 但我无法做到这一点。 正在搜索,我发现了一些想法: Android BLE API:未收到GATT 通知,蓝牙低功耗(BLE)设备通知的步骤是什么? ,但仍然没有运气我不明白它是如何工作的,我需要定义什么参数或我需要做什么!!! 一些好的灵魂可以分享我这样做的完整项目。 我需要的只是在BLE设备返回某些数据时可视化特征的值。 我阅读了官方的Android文档,但它并没有那么具体。 提前致谢 这些是我的代码: 设备 public class DeviceControlActivity extends Activity { public static final String EXTRAS_DEVICE_NAME = “DEVICE_NAME”; public static final String EXTRAS_DEVICE_ADDRESS = “DEVICE_ADDRESS”; private TextView mConnectionState; private TextView mDataField; private TextView mRssiField; private String mDeviceName; private String […]