Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复Android BLE扫描失败的应用程序注册失败的错误?_Android_Bluetooth Lowenergy - Fatal编程技术网

如何修复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
。请随时将问题标记为重复问题,而不是将同一答案发布到多个位置。可能重复