24 june 2015 on
android
本文主要是翻譯了 google 的官方文件。
android 提供預設的藍芽協議棧是 bluedroid,分為兩層:藍芽嵌入式系統(bte)和藍芽應用層(bta),bte 層主要實現藍芽的核心功能,bta 層則主要負責和 anroid 框架通訊。
android 4.2 之前,google 一直應用的是 linux 官方藍芽協議棧,即知名老牌開源
專案 bluez。bluez 實際上是由高通公司在 2001 年 5 月基於 gpl 協議 release 的乙個開源專案,該專案僅 release 乙個月後就被 linux 之父 linux torvalds 納入了 linux 核心,並做為 linux 2.4.6 核心的官方藍芽協議棧。隨著 android 裝置的流行,bluez 也得到了極大的完善和擴充套件。例如 android 4.1 中 bluez 的版本公升級為 4.93,它支援藍芽核心規範4.0,並實現了絕大部分的 profiles。但是從 android 4.2 即 jelly bean 開始,google 便在 android 原始碼中推出了它和博通公司一起開發的 bluedroid 以替代 bluez。雖然因為時間及成熟度的原因,大部分手機廠商在 android 4.2 中仍繼續應用 bluez。但是 bluez 的創始者,高通公司也將在基於其晶元的 android 參考設計中去除 bluez,並僅支援 bluedroid。bluez 的未來如何筆者姑且不論。不過,能讓高通改弦易轍,bluedroid 自有其合理之處。相比 bluez,bluedroid 最值得稱道的地方就是其框架結構變得更為簡潔和清晰。另外,借助 hal(hardware abstraction layer,硬體抽象層),bluedroid 終於不再和 dbus 有任何瓜葛。(引用)
藍芽系統服務通過jni
來與藍芽協議棧互動,通過binder ipc
來與應用層互動。系統服務給開發者提供各種藍芽profile的訪問。android 中的藍芽總體架構如下圖所示:
相關的 api 來和藍芽硬體互動。其內部的實現,是通過binder ipc
機制來呼叫bluetooth
程序的;
jni 與andorid.bluetooth
硬體抽閒層 hal 硬體抽閒層(hardware abstraction layer)定義了andorid.bluetooth
api 和藍芽程序需要用到的標準介面,你必須實現這些介面來確保你的藍芽硬體正常工作。藍芽 hal 相關的標頭檔案位於hardware/libhardware/include/hardware/bluetooth.h
和hardware/libhardware/include/hardware/bt_*.h
;
藍芽協議棧 bluetooth stack android 提供的預設藍芽協議棧位於external/bluetooth/bluedroid
。這個協議棧實現了通用的藍芽 hal 介面,並且可以通過擴充套件(extentions)和配置(configuration)來自定義。編譯到系統中就是/system/lib/hw/bluetooth.default.so
;
**商擴充套件 vendor extentions **商也可以通過建立libbt-vendor
並指定這些模組,來新增自己定義擴充套件和 hci 層跟蹤。
藍芽的 hal 相關檔案在hardware/libhardware/include/hardware/
,包括但不侷限於以下的檔案:
值得注意的是,android 中藍芽並不侷限於 hal 中暴露的這些特性和 profile。bluedroid 是是藍芽協議棧的預設是實現,它實現了預設的 hal 以及額外的自定義特性。bluedroid 的**在external/bluetooth/bluedroid
目錄。
如果使用了預設的 bluedroid 協議棧,但是想加入一些自定義功能,可以這樣做:
自定義**商擴充套件和配置修改 -- 你可以通過建立libbt-vendor
模組來新增例如額外的 at 命令或者裝置特定的配置。可以參考vendor/broadcom/libbt-vendor
目錄的例子;
host controller inte***ce (hci) -- 你可以通過新增libbt-hci
模組來提供你自己的 hci 介面(主要用來做除錯跟蹤)。參考external/bluetooth/hci
目錄的例子。
ios 藍芽簡介
這裡主要做個記錄。ios中其實提供了四個框架可以讓我們去實現藍芽連線 其中gamekit框架是在ios7的時候過期了,之前常用於遊戲的連線,gamekit框架可以使用藍芽在玩家之間建立乙個對等連線,然後彼此之間可以對戰,蘋果取而代之的是multipeerconnectivity,這兩個框架都只能用於...
藍芽4 0簡介
藍芽4.0包含了3種藍芽規格 1.傳統藍芽 對應的標識名稱為 bluetooth 2.高速藍芽 對應的標識名稱為 bluetooth smart ready 3.低功耗藍芽 ble 對應的標識名稱為 bluetooth smart 這三種規格既可以組合使用也可以分開使用,下面是對應可連線的裝置 注 ...
android 藍芽檔案
利用android 傳送檔案需要解決一下幾個問題。1,傳送方選中檔案時如何獲取檔案位址?以下這段 作用是返回你選擇檔案的uri,因此你要重寫 onactivityresult來獲取返回的uri。但是這裡有有兩種情況存在先看下圖。當你選擇檔案管理的時候選擇其中的乙個檔案返回的uri為 file sto...