相关疑难解决方法(0)

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 6.0上的蓝牙低功耗startScan找不到设备

我正在使用Nexus 5开发一个使用蓝牙低功耗的应用程序.它在Lollipop上工作,现在它不能用于Marshmallow.我在清单和活动中的runTime上设置了ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION权限.

这是ScanFilters列表:

mScanFilterTest = new ScanFilter.Builder().build();
mScanFilter = new ArrayList<ScanFilter>();
mScanFilter.add(mScanFilterTest);
Run Code Online (Sandbox Code Playgroud)

这些是设置:

mScanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(0)
                .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).build();
Run Code Online (Sandbox Code Playgroud)

这些是我的回调:

 mBLEScan = new ScanCallback() {
     @Override
     public void onScanResult(int callbackType, ScanResult result) {
         super.onScanResult(callbackType, result);
         Log.i(TAG, "******************************************");
         Log.i(TAG, "The scan result " + result);
         Log.i(TAG, "------------------------------------------");
         }
     };
Run Code Online (Sandbox Code Playgroud)

这是我的电话:

mBluetoothLeScanner.startScan(mScanFilter, mScanSettings, mBLEScan);
Run Code Online (Sandbox Code Playgroud)

它开始扫描但没有找到任何设备.请帮我!!!!

android bluetooth bluetooth-lowenergy android-6.0-marshmallow

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

如何在不使用缓存的情况下以编程方式在Android上强制执行蓝牙低能耗服务发现

我在Nexus 7上使用Android 4.4.2.我有一个蓝牙低功耗外设,其服务在重新启动时会发生变化.Android应用程序调用BluetoothGatt.discoverServices().然而,Android只查询外围设备一次以发现服务,后续调用discoverServices()会导致第一次调用的缓存数据,甚至断开连接之间.如果我禁用/启用Android bt适配器,则discoverServices()通过查询外设来刷新缓存.有没有一种程序化的方法来强制Android刷新其'ble服务缓存而不禁用/启用适配器?

android bluetooth service-discovery bluetooth-lowenergy

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