????大家好,我之前一直想寫一個(gè)關(guān)于藍(lán)牙的博客剃执,可惜一直沒有時(shí)間現(xiàn)在我辭職了打算寫一篇關(guān)于Android藍(lán)牙的博客誓禁。我想將這篇博客分為兩部分來寫,第一部分我打算寫經(jīng)典藍(lán)牙這一篇就是關(guān)于經(jīng)典藍(lán)牙的肾档,第二部分ble藍(lán)牙(低功耗藍(lán)牙)我很快會(huì)更新ble藍(lán)牙的部分摹恰。這一篇是我第一次系統(tǒng)性的博客,如若寫的不好還請(qǐng)見諒(寫的不好的部分大家可以在@我)怒见。
一俗慈、藍(lán)牙的起源。
藍(lán)牙的創(chuàng)始人是瑞典愛立信公司遣耍,愛立信早在1994年就已進(jìn)行研發(fā)闺阱。1997年,愛立信與其他設(shè)備生產(chǎn)商聯(lián)系舵变,并激發(fā)了他們對(duì)該項(xiàng)技術(shù)的濃厚興趣酣溃。 1998年2月,5個(gè)跨國(guó)大公司纪隙,包括愛立信赊豌、諾基亞、IBM绵咱、東芝及Intel組成了一個(gè)特殊興趣小組(SIG)亿絮,他們共同的目標(biāo)是建立一個(gè)全球性的小范圍無線通信技術(shù),即現(xiàn)在的藍(lán)牙麸拄。
藍(lán)牙的名字來源于10世紀(jì)丹麥國(guó)王Harald Blatand——英譯為Harold Bluetooth(因?yàn)樗窒矚g吃藍(lán)梅,所以牙齒每天都帶著藍(lán)色)派昧。在行業(yè)協(xié)會(huì)籌備階段,需要一個(gè)極具有表現(xiàn)力的名字來命名這項(xiàng)高新技術(shù)拢切。行業(yè)組織人員蒂萎,在經(jīng)過一夜關(guān)于歐洲歷史和未來無限技術(shù)發(fā)展的討論后,有些人認(rèn)為用Blatand國(guó)王的名字命名再合適不過了淮椰。Blatand國(guó)王將現(xiàn)在的挪威五慈,瑞典和丹麥統(tǒng)一起來纳寂;他的口齒伶俐,善于交際,就如同這項(xiàng)即將面世的技術(shù),技術(shù)將被定義為允許不同工業(yè)領(lǐng)域之間的協(xié)調(diào)工作泻拦,保持著個(gè)各系統(tǒng)領(lǐng)域之間的良好交流毙芜,例如計(jì)算,手機(jī)和汽車行業(yè)之間的工作争拐。名字于是就這么定下來了腋粥。
二、Android藍(lán)牙的打開與關(guān)閉架曹。
??Android做藍(lán)牙開發(fā)需要藍(lán)牙權(quán)限打開藍(lán)牙的方式以下這三種:
????1隘冲、調(diào)用系統(tǒng)彈出框提示用戶打開,會(huì)有提示框提示用戶是否打開藍(lán)牙
????Intent?enabler?=?new?Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);??
????startActivityForResult(enabler,?REQUEST_ENABLE);?
????2绑雄、強(qiáng)制打開藍(lán)牙展辞,手機(jī)上沒有任何提示。
????mDefaultAdapter = BluetoothAdapter.getDefaultAdapter();
????mDefaultAdapter.enable()万牺;
3罗珍、跳轉(zhuǎn)到系統(tǒng)設(shè)置中讓用戶自己打開
?????Intent?enabler?=?new?Intent(Settings.ACTION_BLUETOOTH_SETTINGS);??
????startActivityForResult(enabler,?REQUEST_ENABLE);?
這三種打開藍(lán)牙的方式中第二種會(huì)受到系統(tǒng)或者第三方權(quán)限管理應(yīng)用的阻止而存在打開藍(lán)牙失敗的情況。我們一般打開藍(lán)牙可以用以下這種模式:
1° 采用強(qiáng)制開啟 Bluetooth 的方式打開 Bluetooth 脚粟,但是調(diào)用強(qiáng)制開啟 Bluetooth 代碼之前覆旱,我們自己在應(yīng)用中提示用戶忿磅,我們的應(yīng)用需要開啟 Bluetooth ,讓用戶自己選擇是否開啟 Bluetooth 席函。自己在應(yīng)用中提示用戶我們需要開啟 Bluetooth 相對(duì)于彈出系統(tǒng)的提示框提示用戶當(dāng)前應(yīng)用需要開啟 Bluetooth 的優(yōu)勢(shì)在于我們可以控制提示的內(nèi)容和提示的方式以及 UI磨德。
2° 假若用戶選擇了開啟 Bluetooth,但是強(qiáng)制開啟 Bluetooth 失敗徒恋,比如系統(tǒng)自帶的權(quán)限管理禁止你的應(yīng)用開啟 Bluetooth ,我們不去提示用戶說當(dāng)前系統(tǒng)禁止了應(yīng)用開啟 Bluetooth,讓用戶自己去解除禁止已慢。這樣顯然用戶體驗(yàn)很差。這種情況下霹购,我們?cè)偃フ{(diào)用彈出系統(tǒng)提示框提醒用戶打開 Bluetooth即可佑惠。這種方式一般系統(tǒng)或者第三方應(yīng)用不會(huì)禁止。
3° 如果彈出系統(tǒng)提示框提醒用戶打開 Bluetooth 有問題的話齐疙,最后采用提示用戶自己去系統(tǒng) Bluetooth 設(shè)置中打開 Bluetooth膜楷,跳轉(zhuǎn)到系統(tǒng)的 Bluetooth 設(shè)置界面。
4贞奋、強(qiáng)制關(guān)閉藍(lán)牙:
mDefaultAdapter.disable();
5赌厅、跳轉(zhuǎn)到系統(tǒng)設(shè)置中讓用戶自己關(guān)閉
????Intent?enabler?=?new?Intent(Settings.ACTION_BLUETOOTH_SETTINGS);??
????startActivityForResult(enabler,?REQUEST_ENABLE);?
考慮到涉及用戶隱私和用戶體驗(yàn),推薦以下方式關(guān)閉 Bluetooth :
1° 采用強(qiáng)制關(guān)閉 Bluetooth 的方式關(guān)閉 Bluetooth 轿塔,但是調(diào)用強(qiáng)制關(guān)閉 Bluetooth 代碼之前特愿,我們自己在應(yīng)用中提示用戶仲墨,我們的應(yīng)用需要關(guān)閉 Bluetooth ,讓用戶自己選擇是否關(guān)閉 Bluetooth 揍障。自己在應(yīng)用中提示用戶我們需要關(guān)閉 Bluetooth 目养,暫時(shí)沒有發(fā)現(xiàn) Android 有提供了彈出系統(tǒng)提示框提示用戶關(guān)閉 Bluetooth 的 API。
2° 假若用戶選擇了關(guān)閉 Bluetooth毒嫡,但是強(qiáng)制關(guān)閉 Bluetooth 失敗癌蚁,比如系統(tǒng)自帶的權(quán)限管理禁止你的應(yīng)用關(guān)閉 Bluetooth ,我們不去提示用戶說當(dāng)前系統(tǒng)禁止了應(yīng)用關(guān)閉 Bluetooth审胚,讓用戶自己去解除禁止匈勋。這樣顯然用戶體驗(yàn)很差。這種情況下膳叨,我們提示用戶“由于某些原因?qū)е聭?yīng)用關(guān)閉 Bluetooth 失敗洽洁,請(qǐng)到系統(tǒng)設(shè)置中自己關(guān)閉 Bluetooth”,然后跳轉(zhuǎn)到系統(tǒng) Bluetooth 設(shè)置中菲嘴。
三饿自、藍(lán)牙的掃描和關(guān)閉