Android-藍牙的網絡共享與連接分析


一、概述

本次分析是基於android7.0的源碼,主要是介紹如何通過反射來打開藍牙的網絡共享以及互聯網的連接。

二、藍牙的網絡共享

1. 網絡共享部分源碼分析

關於packages/apps/Settings/src/com/android/settings/TetherSettings.java這個路徑的代碼是展示設置中數據共享的頁面,其中包括了usb、藍牙、wifi,因此打開藍牙共享的點擊事件從這里開始。

關於點擊事件的處理如下:

發現調用了mCm(ConnectivityManager.java類)的startTethering()方法,接下來查看frameworks/base/core/java/android/net/ConnectivityManager.java這個類。

調用了mService(IConnectivityManager.aidl)中的startTethering()方法,通過查看源碼發現在在ConnectivityService.java類中繼承了IConnectivityManager.stub,此類位於:frameworks/base/services/core/java/com/android/server/ConnectivityService.java

接下來調用了mTethering(Tethering.java類)的startTethering()方法,此類位於:frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java

 

最后通過監聽服務回調調用BluetoothPan中的setBluetoothTetheting()方法,BluetoothPan的實例可以通過監聽服務獲取,自此打開藍牙共享網絡的源碼分析完成。

總結如下:

1) 通過監聽服務回調獲取BluetoothPan的實例。

2) 反射調用BluetoothPan中的setBluetoothTetheting()方法。

2. 通過反射打開網絡共享

1) 通過監聽服務回調獲取BluetoothPan的實例。  

綁定回調監聽mBluetoothAdapter.getProfileProxy(this.context, mProfileServiceListener, 5);

2)  反射調用BluetoothPan中的setBluetoothTetheting()方法。   

藍牙實現自動打開網絡共享完成。

三、藍牙互聯網連接

1. 互聯網連接部分源碼分析

首先我們從點擊已配對的藍牙設備事件出發,一步步了解源碼做了什么事情。
關於packages/apps/Settings/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java這個路徑的代碼是搜索到的藍牙設備列表展示,里面包含了如何處理藍牙設備的點擊事件。

當點擊已綁定設備執行的是connect方法,查看frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java代碼。

在這個java類中繼續追尋,發現最后執行如下代碼:

LocalBluetoothProfile這個類是一個接口類,通過查看源碼發現同路徑下有MapProfile.java、OppProfile.java、PanProfile.java等等類中實現了這個接口,PanProfile.java正是我們需要的。

查看PanProfile下的connect()方法,發現該方法先調用了mService(BluetoothPan類)下的disconnect()方法,再調用了connect()方法。

並且mService是可以通過監聽服務回調獲取到,所以我們可以在上層通過如下方式獲取BluetoothPan的實例。

整個連接的源碼分析過程完成,做一下總結:

1) 通過監聽服務回調獲取BluetoothPan的實例。

2) 按照PanProfile.java類中的connect()方法,通過反射先調用BluetoothPan的disconnect方法,再調用connect()方法。

2. 通過反射打開網絡共享

1) 通過監聽服務回調獲取BluetoothPan的實例。

綁定回調監聽mBluetoothAdapter.getProfileProxy(this.context, mProfileServiceListener, 5);

2) 先反射獲取已連接設備,進行斷開,再連接需要連接的設備。

藍牙設備實現自動連接完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM