如何修复Android BLE扫描失败的应用程序注册失败的错误?
大多数情况下,它工作得很好,但有时我在尝试发现可扩展设备时会出现以下错误:如何修复Android BLE扫描失败的应用程序注册失败的错误?,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,大多数情况下,它工作得很好,但有时我在尝试发现可扩展设备时会出现以下错误: 02-12 18:00:41.952 16178-16339/com.icrealtime.allie W/BleRpcConnectionFactory﹕ Starting discovery 02-12 18:00:41.955 16178-16339/com.icrealtime.allie D/BluetoothAdapter﹕ STATE_ON 02-12 18:00:41.957 24342-18813
02-12 18:00:41.952 16178-16339/com.icrealtime.allie W/BleRpcConnectionFactory﹕ Starting discovery
02-12 18:00:41.955 16178-16339/com.icrealtime.allie D/BluetoothAdapter﹕ STATE_ON
02-12 18:00:41.957 24342-18813/? D/BtGatt.GattService﹕ registerClient() - UUID=c4a4c56d-1d10-4615-9c8d-44971bc3d6e6
02-12 18:00:41.957 24342-24384/? E/bt_btif﹕ Register with GATT stack failed.
02-12 18:00:41.957 24342-24384/? E/bt_btif﹕ Register with GATT stack failed.
02-12 18:00:41.957 24342-24370/? D/BtGatt.GattService﹕ onClientRegistered() - UUID=c4a4c56d-1d10-4615-9c8d-44971bc3d6e6, clientIf=0
02-12 18:00:41.958 16178-16190/com.icrealtime.allie D/BluetoothLeScanner﹕ onClientRegistered() - status=133 clientIf=0
02-12 18:00:41.967 16178-16178/com.icrealtime.allie E/BleRpcConnectionFactory﹕ BLE SCAN FAILED: 2
错误代码2代表
这似乎是android内部的问题,但可能会受到我的代码出错的影响。原因可能是什么?如何绕过它
PS.Nexus 9、Android 6.0.1一个可能的解决办法可能是通过编程方式禁用/启用blueetooth。当出现错误扫描\应用程序\注册\失败时,应禁用BluetoothAdapter:
BluetoothAdapter.getDefaultAdapter().disable();
case BluetoothAdapter.STATE_OFF:
Log.d(TAG, "bluetooth adapter turned off");
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d(TAG, "bluetooth adapter try to enable");
BluetoothAdapter.getDefaultAdapter().enable();
}}, 500);
break;
禁用BluetoothAdapter时,将触发事件状态“关闭”。触发此事件后,请尝试重新连接到BluetoothAdapter:
BluetoothAdapter.getDefaultAdapter().disable();
case BluetoothAdapter.STATE_OFF:
Log.d(TAG, "bluetooth adapter turned off");
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d(TAG, "bluetooth adapter try to enable");
BluetoothAdapter.getDefaultAdapter().enable();
}}, 500);
break;
理想情况下,请查看手机的位置服务支持(安卓6+BLE服务要求开启该功能才能正常工作)。我们在Cordova插件的其他场合也看到过这个问题。打开位置服务(或检查这些服务是否已打开)。您需要在清单中添加以下权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-feature android:name="android.hardware.location.network"/>
如果不是的话,粗略的位置将无法访问网络,因此LeScan会中断我也有同样的问题,这对我来说很有效。可能看起来像一个愚蠢的修复,但工作lol 在清单文件中添加所需的蓝牙和位置权限要求后
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION_LOCATION" />
您还需要将int REQUEST\u LOCATION\u ENABLE\u代码定义为1。如果断开和/或重新连接,请确保关闭GattConnection。仅仅处理对象并不会释放底层资源,而且很快就会达到一个极限,因为据我所知,所有应用程序中可能同时出现的客户端不超过32个。不幸的是,这似乎无法解决问题。我在Android 6.0.1和7.1上都看到了同样的问题。我的应用程序进行了长时间的连续扫描;这在大约一周内只发生了两次。从设置应用程序切换蓝牙适配器的开关也不能解决问题,但有趣的是设置应用程序仍然可以对周围的外围设备执行蓝牙扫描,但所有进行扫描的第三方应用程序都会收到此错误代码
SCAN\u FAILED\u APPLICATION\u REGISTRATION\u FAILED
。请随时将问题标记为重复问题,而不是将同一答案发布到多个位置。可能重复