2012-06-06 99 views
2

我正在編寫一個應用程序,該應用程序依賴於可通過藍牙發現的Android設備(用於當前測試目的HTC Evo 4G和幾個原始Motorola Droids),時間爲300秒。擴展Android藍牙可發現性

我針對的是Android 2.0.1版,因此根據API我應該能夠提示用戶啓用最多300秒的發現。在我的機器人和我的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秒後結束。

這是硬件問題,還是我在這裏做錯了什麼?

+0

你確定你的目標是Android 2.0.1 - 我不認爲有這樣的事情。 – Tom

+0

2.0.1版本這樣的東西,還是硬件限制最大發現時間的東西? 2.0.1是我在設置中看到的固件版本,應該是Eclaire,修訂版1或API Level 6 – user1438560

回答

1

除了Android超時之外,還有藍牙DiscoverableTimeout值。

通常,DiscoverableTimeout被設置在文件/system/etc/bluetooth/main.conf到120中。

你應該寫

DiscoverableTimeout = 0 
/system/etc/bluetooth/main.conf

禁用藍牙超時。這將允許您將Android超時延長超過120秒。

+0

或者,您可以使用'BluetoothAdapter'類的隱藏方法'setDiscoverableTimeout'來設置'DiscoverableTimeout = 0' –