- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我注意到 Samsung S8、Android 7.0(更新。这也发生在 Android 7.0:Samsung 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 filters
08-14 12:44:20.811 4079-7185/? D/BtGatt.GattService: getScanSettings
08-14 12:44:20.812 4079-7185/? D/BtGatt.GattService: Is it foreground application = true
08-14 12:44:20.812 4079-7185/? D/BtGatt.GattService: not a background application
08-14 12:44:20.817 4079-7185/? E/BtGatt.GattService: App 'com.my.app' is scanning too frequently
问题肯定在于那 6 个 STATE_ON 调用结果,这是未记录的 BLE 行为更改的一部分,在 DP4 发行说明中首次提到:
We’ve changed the BLE Scanning behavior starting in DP4. We’ll prevent applications from starting and stopping scans more than 5 times in 30 seconds. For long running scans, we’ll convert them into opportunistic scans.
即使我设置了:ScanSettings.setScanMode(ScanSettings.SCAN_MODE_OPPORTUNISTIC)
,我也没有在 30 秒内完成 6 次扫描。
代码是:
List<ScanFilter> filters = new ArrayList<>();
ScanSettings scanSettings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_OPPORTUNISTIC)
.build();
bluetoothAdapter.getBluetoothLeScanner().startScan(filters, scanSettings, recoderScanCallback);
//events from the log happen before this log is printed
Log.i("test", " started!");
return recoderScanCallback.scanResultObservable().map((ScanResult record) -> {
//never gets here
Log.i("test", " result!");
});
RecorderScanCallback
派生自 ScanCallback
。我们无法使用 RxAndroidBle#rxBleClient.scanBleSettings
(ScanSettings),因为我们的代码即将卡住,我们使用的是 1.1.0 版本的 lib。
为什么 ScanSettings.setScanMode
不改变搜索结果?
最佳答案
Android 7 可在 30 秒内防止扫描开始-停止超过 5 次。不好的一面是,它不返回错误,而只是打印日志。该应用程序认为扫描已开始,但实际上并未从 ble 堆栈开始。它还将长时间运行的扫描转换为机会扫描,以防止滥用应用程序。长时间运行扫描的持续时间为 30 分钟。
这些更改未记录在案,在这篇文章中提到:https://blog.classycode.com/undocumented-android-7-ble-behavior-changes-d1a9bd87d983
关于android - 使用 ScanSettings.SCAN_MODE_OPPORTUNISTIC '应用程序扫描太频繁',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45681711/
我尝试验证 UUID v4。我尝试使用 sscanf 执行此操作,如果可以使用 sscanf 完全读取 UUID(= 读取的字符总数 - 36),我认为这是正确的 UUID。我的代码到现在: #inc
我注意到 Samsung S8、Android 7.0(更新。这也发生在 Android 7.0:Samsung S7、Nexus 5x)上的一个问题,它告诉(经过几次测试)应用扫描过于频繁: 08-
ScanSettings 周围的文档非常简洁,我很难提出最佳配置。 我的要求要求我应该尽快报告一个符合我的过滤条件(根据服务 UUID 过滤)的新广告数据包。重复的广告包对我没有用。当外围设备将在其一
我不明白这个扫描集是如何工作的 scanf("%*[^:]%*2c%[^\n]", str1);// 1st scanf 完整代码是 int main() { int ch; char
这个问题已经有答案了: Reading in double values with scanf in c (7 个回答) 已关闭 5 年前。 遵循this question中的扫描集格式,我尝试了一种
如果所有字段都已填充,我可以使用 sscanf(见下文)以逗号分隔格式提取字段。但是,如果一个字段是空白的,那么只会填充空白字段。有什么方法可以继续,忽略空白字段的问题,以便填充后续字段吗? #inc
如何在 C 中的 sscanf 函数中使用 [0-9] 或 [a-z] 等扫描集读取输入。我们未能成功实现扫描集以成功扫描字符串。 这是我的例子: void printResult(char * te
我是一名优秀的程序员,十分优秀!