Ⅰ 如何使用android藍牙開發
Android平台支持藍牙網路協議棧,實現藍牙設備之間數據的無線傳輸。本文檔描述了怎樣利用android平台提供的藍牙API去實現藍壓設備之間的通信。藍牙具有point-to-point 和 multipoint兩種連接功能。
使用藍牙API,可以做到:
* 搜索藍牙設備
* 從本地的Bluetooth adapter中查詢已經配對的設備
* 建立RFCOMM通道
* 通過service discovery連接到其它設備
* 在設備之間傳輸數據
* 管理多個連接
基礎知識
本文檔介紹了如何使用Android的藍牙API來完成的四個必要的主要任務,使用藍牙進行設備通信,主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數據。
所有的藍牙API在android.bluetooth包中。實現這些功能主要需要下面這幾個類和介面:
BluetoothAdapter
代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。
BluetoothDevice
代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 (其信息是封裝在 bluetoothsocket 中) 。
BluetoothSocket
代表了一個藍牙套接字的介面(類似於 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。
BluetoothServerSocket
代表打開服務連接來監聽可能到來的連接請求 (屬於 server 端) , 為了連接兩個藍牙設備必須有一個設備作為伺服器打開一個服務套接字。 當遠端設備發起連 接連接請求的時候,並且已經連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。
BluetoothClass
描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等。可以用它來進行一些UI上的提示。
BluetoothProfile
BluetoothHeadset
提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。
BluetoothA2dp
定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 「A2DP的」代表高級音頻分配模式。
BluetoothHealth
代表了醫療設備配置代理控制的藍牙服務
BluetoothHealthCallback
一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類並實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。
代表一個應用程序的配置,藍牙醫療第三方應用注冊與遠程藍牙醫療設備交流。
BluetoothProfile.ServiceListener
當他們已經連接到或從服務斷開時通知BluetoothProfile IPX的客戶時一個介面(即運行一個特定的配置文件,內部服務)。
藍牙許可權
為了在你的應用中使用藍牙功能,至少要在AndroidManifest.xml中聲明兩個許可權:BLUETOOTH(任何藍牙相關API都要使用這個許可權) 和 BLUETOOTH_ADMIN(設備搜索、藍牙設置等)。
為了執行藍牙通信,例如連接請求,接收連接和傳送數據都必須有BLUETOOTH許可權。
必須要求BLUETOOTH_ADMIN的許可權來啟動設備發現或操縱藍牙設置。大多數應用程序都需要這個許可權能力,發現當地的藍牙設備。此許可權授予其他的能力不應該使用,除非應用程序是一個「電源管理」,將根據用戶要求修改的藍牙設置
注釋:要請求BLUETOOTH_ADMIN的話,必須要先有BLUETOOTH。
在你的應用manifest 文件中聲明藍牙許可權。例如:
<manifest ... >
<uses-permission android:name="android.permission.BLUETOOTH" />
...
</manifest>
通過查看<uses-permission>資料來聲明應用許可權獲取更多的信息。
藍牙設置
在你的應用通過藍牙進行通信之前,你需要確認設備是否支持藍牙,如果支持,確信它被打開。
如果不支持,則不能使用藍牙功能。如果支持藍牙,但不能夠使用,你剛要在你的應用中請求使用藍牙。這個要兩步完成,使用BluetoothAdapter。
Ⅱ android藍牙開發,注冊一個廣播接收者報空指針異常的錯誤。
你的context 這個是空對象,你看下你注冊廣播場景的上下文環境。使用對應的對象進行廣播的注冊。
Ⅲ android開發中如何增加藍牙連接成功後彈出一個toast進行提示
用 handler
在activity裡面聲明一個 handler
1、如果藍牙連接是一個類,把handler傳入藍牙的類
當藍牙連接成功之後,Message mes = handler.obtainMessage();用mes發個消息。然後在activity裡面的handler裡面進行處理就可以了。
2.如果藍牙連接在一個類裡面。那就直接用
當藍牙連接成功之後,Message mes = handler.obtainMessage();用mes發個消息。然後在activity裡面的handler裡面進行處理就可以了。
我一般都用service 處理藍牙 以為要循環連接和搜索。也可以用廣播。
Ⅳ 開發Android時,藍牙耳機已經配對和連接上之後,無法再通過廣播Action found搜索到它,是否可以再搜索到
具體有什麼需求,連接成功了,不需要廣播去獲取了啊?直接從列表啟動使用就行。
《》獲取已配對的藍牙設備(android.bluetooth.BluetoothDevice)
首次連接某藍牙設備需要先配對,一旦配對成功,該設備的信息會被保存,以後連接時無需再配對,所以已配對的設備不一定是能連接的。
java">BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> devices = adapter.getBondedDevices();
for(int i=0; i<devices.size(); i++)
{
BluetoothDevice device = (BluetoothDevice) devices.iterator().next();
System.out.println(device.getName());
}
Ⅳ 通過android代碼如何實現手機藍牙自動連接最後一次已配對的設備
先明確場景。你是希望如下哪種自動連接?
case1: 手機開機自動連接藍牙最後配對設備:Android已經在Framework層實現。不需要Apk再做。關鍵代碼如下:
.java 裡面
onReceive 收到事件BluetoothAdapter.STATE_ON後
else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
initiateConnection();給狀態機發CONNECT
.sendMessage(.CONNECT);
case2:藍牙關閉狀態,打開藍牙,自動連接最後使用的設備:Apk層注冊監聽藍牙打開的廣播,然後在事件響應中獲取已配對列表,取第一個去進行連接就好。
注冊監聽藍牙打開的廣播事件:android.bluetooth.adapter.action.STATE_CHANGED
Bluetooth ACTION_STATE_CHANGED curState = 11,preState = 10 打開中
Bluetooth ACTION_STATE_CHANGED curState = 12,preState = 11 打開了。
獲取已配對設備列表:BluetoothAdapter.getBondedDevices()
取出第一個設備(也就是最新的),連接:
framework/base/core/java/android/bluetooth/
BluetoothHeadsetClient: connect(device)
BluetoothA2dpSink: connect(device)
Ⅵ 安卓廣播 藍牙 開發問題
你應該去論壇發求助帖!而不是來網路知道!
Ⅶ android的混合開發 JS頁面能接收廣播嗎 在網頁接收不到藍牙按鍵的事件和廣播
不是手機的問題,耳機的問題。
藍牙耳機不止一種,我所知的一種是a2dp的一種不是a2dp的,a2dp的耳機就是可以聽歌的,另外一種不能聽歌
對於a2dp的耳機,如果短按一次hook鍵,系統會當作一個keyevent來處理,走的是發送廣播的流程。如果短按多次,或者長按一次hook 鍵,不會有keyevent,會當作一個類似與「BVRA」的AP命令來處理,處理過程可以參考源碼的BluetoothHandsfree.java, 這個時候就收不到廣播。
而對於不是a2dp的耳機,無論怎樣按按鍵,都是發送ap命令,不會收到keyevent。
解決方法有兩個,一是換個耳機,二是改rom,在藍牙bsp那部分,無論什麼耳機都走keyevent的流程