相关疑难解决方法(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万
查看次数

获取BLE扫描,不使用过滤器复制UUID

我正在写一个BLE应用程序,需要跟踪外围设备是广告还是停止.

我跟着获得了没有重复的外围设备startLeScan()的 BLE 过滤行为,我在这里完全同意.

为了使其可行,我保留了定时器,在一定时间(3秒)后重新扫描外围设备.但随着市场上新设备的推出(5.0更新),一些时间重新扫描需要一些时间来寻找外围设备.

任何建议或是否有人实现了这一点?

android bluetooth-lowenergy network-scan

10
推荐指数
2
解决办法
2703
查看次数

如何在不连接BLE设备的情况下连续获取RSSI?

我的应用程序需要不断获得蓝牙设备的RSSI值,以进行一些距离-rssi近似,而无需连接.但是,BluetoothAdapter当设备扫描时,只有一次获取RSSI的回调方法.

// Device scan callback
private BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
        runOnUiThread(new Runnable() {
            public void run() {
                ...
            }
        });     
    }   
};
Run Code Online (Sandbox Code Playgroud)

作为解决方案,我创建了两个Runnable对象.一个用于启动,另一个用于停止扫描过程.这两个对象连续相互调用,直到得到我想要的RSSI值.之后我Handler将它们从消息队列中删除.

private Runnable startScan = new Runnable() {       
    @Override
    public void run() {
        bluetoothAdapter.startLeScan(leScanCallback);
        scanHandler.postDelayed(stopScan, SCAN_INTERVAL);
    }               
};

private Runnable stopScan = new Runnable() {        
    @Override
    public void run() {         
        bluetoothAdapter.stopLeScan(leScanCallback);                                            
        scanHandler.postDelayed(startScan, STOP_INTERVAL);          
    }
};
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但我想知道是否有更多可行的选择,无需连接即可.

android bluetooth rssi bluetooth-lowenergy

8
推荐指数
1
解决办法
7799
查看次数