日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Android-蓝牙的网络共享与连接分析

發(fā)布時間:2023/12/29 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 Android-蓝牙的网络共享与连接分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、概述

本次分析是基于android7.0的源碼,主要是介紹如何通過反射來打開藍(lán)牙的網(wǎng)絡(luò)共享以及互聯(lián)網(wǎng)的連接。

二、藍(lán)牙的網(wǎng)絡(luò)共享

1. 網(wǎng)絡(luò)共享部分源碼分析

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

關(guān)于點擊事件的處理如下:

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

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

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

 

最后通過監(jiān)聽服務(wù)回調(diào)調(diào)用BluetoothPan中的setBluetoothTetheting()方法,BluetoothPan的實例可以通過監(jiān)聽服務(wù)獲取,自此打開藍(lán)牙共享網(wǎng)絡(luò)的源碼分析完成。

總結(jié)如下:

1) 通過監(jiān)聽服務(wù)回調(diào)獲取BluetoothPan的實例。

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

2. 通過反射打開網(wǎng)絡(luò)共享

1)通過監(jiān)聽服務(wù)回調(diào)獲取BluetoothPan的實例。

綁定回調(diào)監(jiān)聽mBluetoothAdapter.getProfileProxy(this.context, mProfileServiceListener, 5);

2)反射調(diào)用BluetoothPan中的setBluetoothTetheting()方法?!  ?/p>

藍(lán)牙實現(xiàn)自動打開網(wǎng)絡(luò)共享完成。

三、藍(lán)牙互聯(lián)網(wǎng)連接

1. 互聯(lián)網(wǎng)連接部分源碼分析

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

當(dāng)點擊已綁定設(shè)備執(zhí)行的是connect方法,查看frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java代碼。

在這個java類中繼續(xù)追尋,發(fā)現(xiàn)最后執(zhí)行如下代碼:

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

查看PanProfile下的connect()方法,發(fā)現(xiàn)該方法先調(diào)用了mService(BluetoothPan類)下的disconnect()方法,再調(diào)用了connect()方法。

并且mService是可以通過監(jiān)聽服務(wù)回調(diào)獲取到,所以我們可以在上層通過如下方式獲取BluetoothPan的實例。

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

1) 通過監(jiān)聽服務(wù)回調(diào)獲取BluetoothPan的實例。

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

2. 通過反射打開網(wǎng)絡(luò)共享

1) 通過監(jiān)聽服務(wù)回調(diào)獲取BluetoothPan的實例。

綁定回調(diào)監(jiān)聽mBluetoothAdapter.getProfileProxy(this.context, mProfileServiceListener, 5);

2) 先反射獲取已連接設(shè)備,進(jìn)行斷開,再連接需要連接的設(shè)備。

藍(lán)牙設(shè)備實現(xiàn)自動連接完成。

總結(jié)

以上是生活随笔為你收集整理的Android-蓝牙的网络共享与连接分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。