2009-09-14 15 views
12

兩個問題上的Android藍牙開發:Android - 如何啓用藍牙始終打開?

  1. 有沒有一種方法,使藍牙是始終打開(我可能在我的應用程序很長的設備發現相)的Android?據我所見,默認值是從120s開始倒數。

  2. 它是否存在任何開源藍牙API實現?

回答

9

藍牙實現現在可在Android 2.0 API中使用。 見thisthis

+0

是的,我也看到了這個消息。最後,可用:) – 2009-10-30 10:22:26

+0

藍牙是在SDK中可用,但AVD不支持2.0 API(5級)或文檔不達標最新:http://developer.android.com/guide/developing/工具/ avd.html – 2009-10-30 13:51:08

+1

概覽鏈接可能是一個更好的起點比其他兩個環節: http://developer.android.com/intl/zh-CN/guide/topics/wireless/bluetooth.html – RickNotFred 2010-05-12 19:21:41

2

如果您唯一擔心的是長時間的發現延遲(「電池壽命」),則啓用藍牙始終打開,可能不是一個好決定。

至於第三方藍牙API,我聽說的唯一的東西是iAnywhere Blue SDK(來自Sybase,不是免費的,只有評估版本可用),涵蓋了將來會支持的一些功能來自系統/藍牙bluez包。

根據Android的Bluetooth roadmap,大多數等待Java API,藍牙2.1 + EDR的東西都將在未來的某個時間實現。

祝您的項目順利。

+0

感謝您的電池的建議,但在這個階段的項目,我做不關心電池,只關於恆定的藍牙:) – 2009-09-14 15:04:22

1

Linux上的Bluez堆棧是一個開源實現。它也可以在Windows上使用,但是在Linux上API更加完整。

當你說,'啓用藍牙始終打開'你的意思是,總是試圖發現其他設備?

大多數藍牙芯片都有深度睡眠模式,其中芯片大部分都處於關閉狀態,只是出現了一個檢查任何已建立鏈路上的活動。只有當你想要做某件事(發現,建立連接)或現有鏈接上有活動時,它纔會醒來。

是的,它使用更多的電池電力,如果藍牙完全關閉,但它不是一個完整的吸血鬼。

+0

是的,永遠在我的意思是不斷的客戶端發現。 android的「問題」是默認的120s倒計時。這是可變的嗎?可以說600s? – 2009-09-16 10:32:46

0

BlueCove是一個用於Java的開源藍牙實現。

它適用於很多不同的機器,如果正確的話有一個潛伏在某處的Android兼容版本。

1
private void ensureDiscoverable() { 
    if(D) Log.d(TAG, "ensure discoverable"); 
    if (mBluetoothAdapter.getScanMode() != 
     BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { 
     Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
     discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 
     startActivity(discoverableIntent); 
    } 

http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#ACTION_REQUEST_DISCOVERABLE

+0

這是並不總是(或發現與原始提問者meants),這提示用戶確認。 – Tiago 2012-01-05 12:52:44

+1

我們永遠不能使設備在Android的總是可見的,但我們可以從120秒延長其時間300秒。 – 2012-01-05 13:39:39

2

在2.3.6我可以保證設備始終可見通過將延遲0:

Intent di = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
di.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);