标签: android-bluetooth

Android 4.3蓝牙低功耗不稳定

我目前正在开发一种将使用蓝牙低功耗的应用程序(在Nexus 4上进行测试).在开始使用Android 4.3中的官方BLE API之后,我注意到在我第一次连接设备后,我很少能够成功连接到该设备或与该设备或任何其他设备进行通信.

按照此处的指南,我可以成功连接到设备,扫描服务和特性,以及读取/写入/接收通知而不会出现任何问题.但是,在断开连接并重新连接后,我经常无法扫描服务/特性或无法完成读/写操作.我在日志中找不到任何内容来说明为什么会发生这种情况.

一旦发生这种情况,我必须卸载应用程序,禁用蓝牙,然后重新启动手机才能再次开始工作.

每当设备断开连接时,我都要确保在BluetoothGatt对象上调用close()并将其设置为null.任何见解?


编辑:
日志转储:对于这些日志,我根据我的手机并在/etc/bluetooth/bt_stack.conf中提升了相关项目的跟踪级别

连接成功 - 重新启动手机并安装应用后首次尝试.我能够连接,发现所有服务/特性,以及读/写.

失败尝试1 - 这是断开上述成功连接后的下一次尝试.似乎我能够发现特征,但是第一次尝试读取时返回了一个空值并且很快就断开了.

失败的尝试2 - 我甚至无法发现服务/特征的示例.


编辑2:
我尝试连接的设备基于TI的CC2541芯片.我获得了TI SensorTag(也基于CC2541),并发现TI 昨天为SensorTag 发布了一个Android应用程序.但是,这个应用程序有同样的问题.我在另外两个Nexus 4上进行了测试,结果相同:第一次或第二次连接SensorTag成功,但是(根据日志)之后无法发现服务,导致各种崩溃.我开始怀疑这个特定芯片是否存在问题?

android bluetooth bluetooth-lowenergy android-bluetooth android-4.3-jelly-bean

186
推荐指数
5
解决办法
10万
查看次数

如何以编程方式判断蓝牙设备是否已连接?(Android 2.2)

我知道如何获得配对设备列表,但我怎么知道它们是否已连接?

它必须是可能的,因为我看到它们列在我手机的蓝牙设备列表中,并说明了它们的连接状态.

android android-bluetooth

77
推荐指数
4
解决办法
11万
查看次数

Android设备可以充当iBeacon吗?

Android设备是否可以充当iBeacon并了解其他Android设备何时进入其范围?那些其他Android设备是否需要打开蓝牙?

如果客户进入我的商店并且他的设备上没有安装我的应用程序,iBeacon可以工作,还是必须先安装应用程序?有很多客户每天访问我们的商店,但如果他们没有安装我的应用程序,iBeacon概念是否有效?

android bluetooth bluetooth-lowenergy android-bluetooth ibeacon

75
推荐指数
3
解决办法
4万
查看次数

既然 BluetoothAdapter.getDefaultAdapter() 已被弃用,我该使用什么?

如何修复此代码中的弃用警告?或者,还有其他选择吗? 在此输入图像描述

   val mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
            if (mBluetoothAdapter.isEnabled) {}
Run Code Online (Sandbox Code Playgroud)

android android-bluetooth

46
推荐指数
1
解决办法
2万
查看次数

使用蓝牙LE在iOS和Android之间进行通信

我有一个使用CoreBluetooth的工作应用程序在iPad(中央)和iPhone(外围设备)之间进行通信.我有一项服务有两个特点.我有一台运行最新Android 4.3并支持BTLE的Nexus 7.Android有点迟到了BTLE的潮流,但看起来他们正在接近它,就像iOS的做法一样,最初他们只支持在后续版本中作为外设模式的中心.我可以加载示例Android BTLE应用程序并浏览附近的外围设备.将我的iPhone广告作为外围设备,我可以在Android端附近的外围设备列表中看到CBAdvertisementDataLocalNameKey的值.我可以连接到iPhone,蓝牙符号在连接时从浅灰色变为黑色.连接始终持续10秒,然后断开连接.在Android方面,我应该会在连接时看到可用服务和特征列表.我已经证明Android代码设置正确,因为我可以将它连接到我所拥有的TI CC2541DK-SENSOR硬件,并在连接时列出所有服务和特性.

我花了最后几天对问题进行排查,但没有成功.问题是我无法确定哪个设备出现错误并因此导致断开连接.在连接阶段或服务发现阶段没有来自CBPeripheralManagerDelegate的回调,所以我不知道错误发生在什么时候(如果错误发生在iOS端).在Android方面,调用一个方法来启动服务发现,但是从不调用它们的回调"onServicesDiscovered",这是令人困惑的.有什么方法可以深入了解iOS端BTLE通信的内容,看看发生了什么,并确定发生了什么错误?

ios core-bluetooth bluetooth-lowenergy android-bluetooth android-4.3-jelly-bean

45
推荐指数
3
解决办法
4万
查看次数

使用ScanSettings.SCAN_MODE_OPPORTUNISTIC,"应用程序扫描过于频繁"

我注意到三星S8,Android 7.0上的问题(更新.这也发生在Android 7.0上:三星S7,Nexus 5x),它告诉(经过几次测试)应用程序扫描过于频繁:

08-14 12:44:20.693 25329-25329/com.my.app D/BluetoothAdapter: startLeScan(): null
08-14 12:44:20.695 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.696 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.698 25329-25329/com.my.app D/BluetoothLeScanner: Start Scan
08-14 12:44:20.699 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.700 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.700 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.701 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.703 4079-4093/? D/BtGatt.GattService: registerClient() - UUID=dbaafee1-caf1-4482-9025-b712f000eeab
08-14 12:44:20.807 4079-4204/? D/BtGatt.GattService: onClientRegistered() - UUID=dbaafee1-caf1-4482-9025-b712f000eeab, clientIf=5, status=0
08-14 12:44:20.808 25329-25342/com.my.app D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5 mClientIf=0
08-14 12:44:20.809 4079-7185/? D/BtGatt.GattService: start scan with …
Run Code Online (Sandbox Code Playgroud)

android bluetooth-lowenergy android-bluetooth samsung-galaxy android-7.0-nougat

41
推荐指数
1
解决办法
3452
查看次数

如何以编程方式配对蓝牙设备Android

我正在开发一个应用程序,我想连接蓝牙设备主要问题是我不希望用户输入所需的引脚而不是应用程序应该自己做...我没有任何连接相关的问题...只想要按应用程序本身插入并完成引脚认证过程.

我发现以下代码我确信它正在工作但不确定如何在此代码中添加引脚?

private void pairDevice(BluetoothDevice device) {
        try {
            Log.d("pairDevice()", "Start Pairing...");
            Method m = device.getClass().getMethod("createBond", (Class[]) null);
            m.invoke(device, (Object[]) null);
            Log.d("pairDevice()", "Pairing finished.");
        } catch (Exception e) {
            Log.e("pairDevice()", e.getMessage());
        }
    }
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在上面的代码或任何类似的代码中输入pin来解决问题..谢谢

android bluetooth android-bluetooth

33
推荐指数
5
解决办法
7万
查看次数

Android 6.0 Marshmallow BLE:连接参数

在Android 6中,蓝牙低功耗连接参数管理似乎已经发生了变化.

我有一个BLE外围设备需要使用一些特定的连接参数(特别是连接间隔),我想使用BLE规范允许的最小连接间隔(即7,5ms).

Android SDK不允许从BLE GAP Central(智能手机)端选择它,因此正确的方法是让我的GAP外围设备L2CAP Connection Parameter Update Request在建立GAP连接后发送.

我要求的参数是:

  • conn interval min:7,5ms
  • conn interval max:7,5ms
  • 奴隶潜伏期:0
  • 监督超时:2000ms

这与我一直在测试的所有Android设备一样工作,从4.3到5.x:发送后L2CAP Connection Parameter Update Request,我的设备收到一个L2CAP Connection Parameter Update Response0x0000(接受),然后LE Connection Update Complete event我可以看到所请求的连接参数已经很好了考虑到了.

现在,使用Nexus 9平板电脑或2个不同的Nexus 5设备,都拥有Android 6.0.1,我可以看到它L2CAP Connection Parameter Update Request总是被拒绝(我收到的是L2CAP Connection Parameter Update Response0x0001(拒绝)).然后我收到一个LE Connection Update Complete event我可以看到所请求的连接参数未被考虑的地方.

我一直在尝试使用外设方面的两种不同的实现(一种是使用ST Microelectronics的BlueNRG,一种是使用Nordic Semiconductor的nRF52),两者的结果完全相同.

然后,经过更多的测试:我尝试了不同的参数集,更改了conn interval max(我保持其他参数相同).这是我发现的:

  • 如果conn interval max = 18.75ms,则接受更新请求,间隔设置为18.75ms
  • 如果conn interval max = 17.50ms,则接受更新请求,间隔设置为15.00ms
  • 如果conn …

android bluetooth bluetooth-lowenergy android-bluetooth android-6.0-marshmallow

32
推荐指数
2
解决办法
2万
查看次数

通过蓝牙将多个设备连接到一个设备

我想创建一个游戏,您必须通过蓝牙将多个设备(4+)连接到主设备(例如平板电脑).将有两个应用程序,一个主要的应用程序,所有数据将从手机发送到手机.这甚至可能吗?

android bluetooth android-bluetooth

28
推荐指数
3
解决办法
13万
查看次数

Android BLE,读写特性

我目前正在开发Android BLE,并遇到Android BLE堆栈的很多问题..

我的开发工具是三星Galaxy J和Android 4.3.

我想知道如何从BLE中读取特征并写入特征(就像我验证我收到的数据,然后我使用BLE发送另一个数据)

我有严重的问题了解Android BLE回调如何工作,我不明白这5个功能......而且手册不清楚,任何人都可以用简单的形式解释好的灵魂???

onCharacteristicWrite
onCharacteristicRead
onCharacteristicChanged
onDescriptorRead
onDescriptorWrite
Run Code Online (Sandbox Code Playgroud)

我目前的情况是,我设法读取onCharacteristicChanged()回调中的数据,然后我验证了收到的数据我试图通过使用发送数据

characteristics.setValue(data)
gatt.writeCharacteristic(characteristics)
Run Code Online (Sandbox Code Playgroud)

但是,Android BLE堆栈没有调用onCharacteristicsWrite(),事实上,Android只是挂在那里..

我尝试谷歌关于Android BLE,没有太多的信息,只有一堆抱怨BLE堆栈是多么不稳定......

android bluetooth-lowenergy android-bluetooth

28
推荐指数
1
解决办法
4万
查看次数