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-蓝牙的网络共享与连接分析相关推荐
- java利用安卓蓝牙上网_Android-蓝牙的网络共享与连接分析
一.概述 本次分析是基于android7.0的源码,主要是介绍如何通过反射来打开蓝牙的网络共享以及互联网的连接. 二.蓝牙的网络共享 1. 网络共享部分源码分析 关于packages/apps/Set ...
- 计算机打开共享网络连接打印机共享打印机,网络共享打印机连接不上怎么办_电脑连不上共享打印机如何解决-win7之家...
通常为了方便多人可以一起共用一台打印机,都会在局域网络中将打印机共享,可是近日有不少用户却遇到网络共享打印机连接不上的情况,这该怎么办呢,确认打印机已经共享,并且电脑在同一个家庭组里,针对脑连不上共享 ...
- 怎么在计算机里添加网络公共盘,网络共享怎么连接_电脑如何连接网络共享盘图文步骤...
有时候我们在日常生活办公时,可能会需要共享文件,但是很多人都不知道应该如何操作.最近就有很多朋友问小编网络共享怎么连接的问题,我们应该如何连接网络共享盘呢?别着急,今天小编就为大家带来电脑如何连接网络 ...
- Android 蓝牙 -- 还原网络设置 删除蓝牙所有存储配对信息流程分析---全网唯一
同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. 一.概述 当 ...
- Android 蓝牙 搜索周围设备代码流程分析-framework到协议栈流程
本文详细的将Android 蓝牙扫描周围设备流程进行了梳理,从UI开始扫描到协议栈发送扫描命令到controller,进行了源码分析. 更多源码分析: android-蓝牙A2dp-avrcp-hfp ...
- 如何使用ADB或者shell打开Android的usb网络共享
现在手机不把usb插在电脑上(usb网络共享)这个开关是灰色的不能打开 插上之后可以使用adb命令: #可能的值'mtp', 'ptp', 'rndis', 'midi', 'none' adb sh ...
- Android蓝牙Ble基本操作-(连接2)
前言: 连接采用nordicsemi库,其中nRF Connect也是使用该库. 蓝牙连接库.nordicsemi官网.nRF Connect apk使用教程.nRF Connect apk下载地址. ...
- android 自带网络共享,安卓手机如何共享自身网络
安卓手机如何共享自身网络 我相信很多人都知道路由器跟电脑可以开启wifi,但是有些刚接触手机的人可能不知道其实手机可以共享wifi.那么安卓手机如何共享自身网络呢?下面就让jy135小编来告诉大家吧, ...
- android蓝牙在有效范围内自动连接,android – 如何在范围内找到可用的蓝牙设备?...
这就是我在Activity中搜索蓝牙设备并在ListView中显示其名称和mac地址的方法.除了在ListView中显示设备外,您几乎可以使用发现的BluetoothDevice对象执行任何操作. F ...
最新文章
- grub rescue 安装linux,Ubuntu重装启动失败进入修复grub rescue模式
- 信息系统项目管理师复习第3小时
- jmh气象传真图网站_在冬奥滑雪场,他凭着气象信息,念好一本生意经
- C/S和B/S的区别
- Scala集合体系:可变集合和不可变集合
- Python服务器开发一:python基础
- 程序员妈妈的“work-life balance”,直面想象中的困难
- excel表格不够怎么添加_这个Excel表格,怎么做的这么漂亮
- mysql客户端重置密码是多少,mysql重置root密码
- 分布式事务模型--Saga
- 使用p4c将P4 14代码转换为16代码
- C#基础知识回顾整理
- libmodbus 手册翻译
- 第一门课神经网络和深度学习(一)-深度学习引言
- [数据科学] 通过基因表达监测进行肿瘤预测
- android bks证书生成方式
- 美版t430笔记本win8系统下装Ubuntu的一些尝试和遇到的问题
- 计算机应用基础说课方案,广东省“XX杯”说课大赛计算机应用基础类一等奖作品:PPT写字动画的制作教学设计方案.doc...
- 你该选择哪种编程语言来开发App呢?
- osi七层模型每一层的含义及介绍
热门文章
- 常见二维码上那些奇怪的图案是什么
- 微服务架构-ruoyi
- python刷步数程序设计_利用python+云函数搭建自己的修改步数api接口
- R语言基础作图之点图
- 微信小程序纯前端生成海报并保存本地
- 解决SVN Can’t open file ‘/XXX/xxx/db/txn-current-lock’错误
- Linux命令 磁盘管理——了解磁盘、磁盘分区
- 土巴兔CEO王国彬:这五点,决定了你事业的上限
- Kubernetes之Service
- No tests found for given includes: [xxx.xxx.testList](filter.includeTestsMatching)