Bluetooth Android蓝牙连接参数

Bluetooth Android蓝牙连接参数,bluetooth,bluetooth-lowenergy,android-bluetooth,Bluetooth,Bluetooth Lowenergy,Android Bluetooth,我一直在寻找答案,但没有找到答案,很想在Android(主)设备上更改蓝牙连接参数(连接间隔,从机延迟,监控超时)。对我来说最重要的是监控超时,因为defaut在android上是20秒,我需要减少,我发现连接优先权\u平衡,连接优先权\u高和连接优先权\u低功率但它们不会改变监控超时时间 或者无法从Android(主)更改连接参数? 请帮帮我。 非常感谢您的建议。不幸的是,您只能执行API允许的任何操作。在大多数情况下,移动操作系统API不允许您出于用户友好体验的目的进行低级设置。想象一下,你

我一直在寻找答案,但没有找到答案,很想在Android(主)设备上更改蓝牙连接参数(连接间隔从机延迟监控超时)。对我来说最重要的是监控超时,因为defaut在android上是20秒,我需要减少,我发现
连接优先权\u平衡
连接优先权\u高
连接优先权\u低功率
但它们不会改变监控超时时间

或者无法从Android(主)更改连接参数? 请帮帮我。
非常感谢您的建议。

不幸的是,您只能执行API允许的任何操作。在大多数情况下,移动操作系统API不允许您出于用户友好体验的目的进行低级设置。想象一下,你开发了一个应用程序,它使用消耗电池电量的连接参数。。。然后,应用程序的用户很可能会抱怨操作系统提供商或OEM。这不是我们想要的,应该防止。但是,如果您出于实验原因(研究等)希望进行低级别更改,我建议您下载Android API源代码,进行更改并将自定义Android API插入手机(您需要根目录)

以下是与您的请求相关的
BluetoothGatt.class
中源代码的相关部分:

    public boolean requestConnectionPriority(int connectionPriority) {
    if (connectionPriority < CONNECTION_PRIORITY_BALANCED ||
        connectionPriority > CONNECTION_PRIORITY_LOW_POWER) {
        throw new IllegalArgumentException("connectionPriority not within valid range");
    }

    if (DBG) Log.d(TAG, "requestConnectionPriority() - params: " + connectionPriority);
    if (mService == null || mClientIf == 0) return false;

    try {
        mService.connectionParameterUpdate(mClientIf, mDevice.getAddress(), connectionPriority);
    } catch (RemoteException e) {
        Log.e(TAG,"",e);
        return false;
    }

    return true;
}
public boolean requestConnectionPriority(int-connectionPriority){
如果(连接优先级<连接优先级\u平衡||
连接优先级>连接优先级(低功率){
抛出新的IllegalArgumentException(“connectionPriority不在有效范围内”);
}
if(DBG)Log.d(标记“requestConnectionPriority()-params:+connectionPriority”);
if(mService==null | | mClientIf==0)返回false;
试一试{
mService.connectionParameterUpdate(mClientIf,mDevice.getAddress(),connectionPriority);
}捕获(远程异常){
Log.e(标签“,”e);
返回false;
}
返回true;
}

我将寻找
BluetoothGattService#connectionParameterUpdate
的实现

很好,但是如何在20秒内发现蓝牙le设备何时断开连接?示例超出范围或断电?因为现在当连接状态改变时,我需要等待20秒。我只是假设,但我的假设对你们来说是一个很好的起点。固件代码或android源代码中必须有一个表示监督超时的变量。您可以修改此变量并硬编码所需的值。我不认为这是容易的,但我认为这不是不可能的。但我在android代码ir中找不到任何地方。我更改蓝牙模块RN4020(从)的超时时间。当我连接android(主)时,主设置超时时间在20秒内再次设置,我不知道如何少于。。。并且找不到任何表示超时时间的变量…请查看指导如何下载android源代码的网站:。Android将该值设置回原来的值是很正常的,因为根据蓝牙规范,当主设备(手机)发送连接更新请求时,从设备应接受该请求。(有关更多信息,请查看蓝牙4.0规范)