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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發布時間:2023/12/29 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 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) 先反射獲取已連接設備,進行斷開,再連接需要連接的設備。

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。