2

我正在编写一个依赖于 Android 设备的应用程序(对于我目前的测试目的,一个 HTC Evo 4G 和几个原始的摩托罗拉 Droids)可以通过蓝牙发现 300 秒。

我的目标是 Android 版本 2.0.1,所以根据 API,我应该能够提示用户启用最多 300 秒的可发现性。在我的 Droids 和我的 Evo 上,提示窗口都列出了 300 秒,但它们都在 120 秒后结束。

我用来提示用户的代码在这里:

private void makeDiscoverable() {
    Intent discoverableIntent = new Intent(
            BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
    discoverableIntent.putExtra(
            BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
    startActivity(discoverableIntent);
}

我确信这段代码可以运行。但是,我稍后有一个处理程序,用于处理我的可发现性状态更改(我假设在这种情况下结束),如下所示:

if (isDiscoverableChange(action)) {
            int discoverState = intent.getIntExtra(
                    BluetoothAdapter.EXTRA_SCAN_MODE, Short.MIN_VALUE);
            if (isDiscoverableState(discoverState)) {
                setItOrder();
                setUpScanAndDisplay();
            } else {
                discoverScheduler.cancel();
                itScheduler.cancel();
            }
        }

private boolean isDiscoverableChange(String action) {
    return BluetoothAdapter.ACTION_SCAN_MODE_CHANGED.equals(action);
}

private boolean isDiscoverableState(int state) {
    return state == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
}

我尝试注释掉可发现模式结束时运行的部分,以防它过早取消所有内容,但可发现性确实在 120 秒后结束。

这是硬件问题,还是我在这里做错了什么?

4

2 回答 2

1

DiscoverableTimeout除了 Android 超时,还有蓝牙值。

通常,DiscoverableTimeout在文件中设置/system/etc/bluetooth/main.conf为 120 。

你应该写

DiscoverableTimeout = 0

/system/etc/bluetooth/main.conf禁用蓝牙超时。这将允许您将 Android 超时时间延长超过 120 秒。

于 2012-12-13T13:04:29.360 回答
1

这似乎是一个错误:

问题 15486:蓝牙 Adapter.EXTRA DISCOVERABLE 未遵守 http://code.google.com/p/android/issues/detail?id=15486

问题 13361:BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION 意图额外不会延长 120 秒的发现间隔 http://code.google.com/p/android/issues/detail?id=13361

首次报告于 2010 年 12 月 22 日,仍列为“新”状态,所以我不希望这会得到修复。

于 2012-06-07T16:23:12.123 回答