android 藍(lán)牙源碼分析

android 藍(lán)牙源碼分析

ID:14803255

大?。?4.50 KB

頁數(shù):9頁

時(shí)間:2018-07-30

android 藍(lán)牙源碼分析_第1頁
android 藍(lán)牙源碼分析_第2頁
android 藍(lán)牙源碼分析_第3頁
android 藍(lán)牙源碼分析_第4頁
android 藍(lán)牙源碼分析_第5頁
資源描述:

《android 藍(lán)牙源碼分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、android藍(lán)牙源碼分析BluetoothService類中定義的Native方法都在android_server_BluetoothServer.cpp里建立jni調(diào)用一、開啟(BTTurnonTurnoff)(藍(lán)牙的打開關(guān)閉由類BluetoothEnabler控制。)1.由BluetoothEnabler控制界面操作,在其構(gòu)造函數(shù)里會(huì)先調(diào)用LocalBluetoothManager.getInstance(context)。2.然后在LocalBluetoothManager類的getInstance函數(shù)里會(huì)調(diào)用當(dāng)前類下的

2、init()函數(shù),該init()函數(shù)中通過BluetoothAdapter.getDefaultAdapter()獲得藍(lán)牙設(shè)備的句柄,如果當(dāng)前沒有藍(lán)牙設(shè)備則返回null。3.初始化完畢會(huì)監(jiān)聽checkbox的狀態(tài),當(dāng)觸發(fā)點(diǎn)擊checkbox會(huì)響應(yīng)onPreferenceChange方法,其中將調(diào)用LocalBluetoothManager.setBluetoothEnabled(enable)方法。而LocalBluetoothManager.setBluetoothEnabled(enable)方法,會(huì)調(diào)用mAdapter.e

3、nable()方法,enable()方法又會(huì)調(diào)用BluetoothService.enable()方法。其中,(1)打開(關(guān)閉)操作成功后會(huì)有一個(gè)異步事件ACTION_STATE_CHANGED返回,異步事件由類BluetoothEventRedirector控制(接收廣播,進(jìn)行處理)。在收到ACTION_STATE_CHANGED異步事件后,還需要做update本地設(shè)備profile的事情,讀取上次關(guān)閉前搜索到的藍(lán)牙設(shè)備。(1.1)update本地設(shè)備profile的事情:?(1.2)讀取上次關(guān)閉前搜索到的藍(lán)牙設(shè)備:通過Loc

4、alBluetoothManager.setBluetoothStateInt(intstate)方法調(diào)到CachedBluetoothDeviceManager.onBluetoothStateChanged方法來讀取上次關(guān)閉之前搜索到device.(2)來開啟EnableThread線程,進(jìn)行打開操作,藍(lán)牙的打開關(guān)閉屬于異步操作。ps:在啟動(dòng)藍(lán)牙的時(shí)候,要注意的地方是不能正常啟動(dòng)藍(lán)牙的情況,因?yàn)檎?dòng)的時(shí)候會(huì)返回BluetoothIntent.ENABLED_ACTION這個(gè)Intent,當(dāng)時(shí)當(dāng)啟動(dòng)出現(xiàn)異常的時(shí)候是沒有In

5、tent返回的,android使用回調(diào)函數(shù)來解決這個(gè)問題。下面是在bluetoothdeviceservice.java里面enable((IBluetoothDeviceCallbackcallback)的過程:(以下代碼屬于較低版本的android源碼,與較高版本源碼中已有所不同,只作為參考...)001ViewCode002publicsynchronizedbooleanenable(IBluetoothDeviceCallbackcallback){003checkPermissionBluetoothAdmin();

6、004Log.d(TAG,"startenable!");005//AirplanemodecanpreventBluetoothradiofrombeingturnedon.006if(mIsAirplaneSensitive&&isAirplaneModeOn()){007returnfalse;008}009if(mIsEnabled){010returnfalse;011}012if(mEnableThread!=null&&mEnableThread.isAlive()){013returnfalse;014}015/

7、/主要的啟動(dòng)過程是放在一個(gè)新起的線程里面,但是不管能不能啟動(dòng)016//仍然返回了true017mEnableThread=newEnableThread(callback);018mEnableThread.start();019//020returntrue;021022}023024privateEnableThreadmEnableThread;025privateclassEnableThreadextendsThread{026privatefinalIBluetoothDeviceCallbackmEnableCal

8、lback;027publicEnableThread(IBluetoothDeviceCallbackcallback){028mEnableCallback=callback;029}030publicvoidrun(){031booleanres=enab

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。