一、概述

本次分析是基于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-蓝牙的网络共享与连接分析相关推荐

  1. java利用安卓蓝牙上网_Android-蓝牙的网络共享与连接分析

    一.概述 本次分析是基于android7.0的源码,主要是介绍如何通过反射来打开蓝牙的网络共享以及互联网的连接. 二.蓝牙的网络共享 1. 网络共享部分源码分析 关于packages/apps/Set ...

  2. 计算机打开共享网络连接打印机共享打印机,网络共享打印机连接不上怎么办_电脑连不上共享打印机如何解决-win7之家...

    通常为了方便多人可以一起共用一台打印机,都会在局域网络中将打印机共享,可是近日有不少用户却遇到网络共享打印机连接不上的情况,这该怎么办呢,确认打印机已经共享,并且电脑在同一个家庭组里,针对脑连不上共享 ...

  3. 怎么在计算机里添加网络公共盘,网络共享怎么连接_电脑如何连接网络共享盘图文步骤...

    有时候我们在日常生活办公时,可能会需要共享文件,但是很多人都不知道应该如何操作.最近就有很多朋友问小编网络共享怎么连接的问题,我们应该如何连接网络共享盘呢?别着急,今天小编就为大家带来电脑如何连接网络 ...

  4. Android 蓝牙 -- 还原网络设置 删除蓝牙所有存储配对信息流程分析---全网唯一

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. 一.概述 当 ...

  5. Android 蓝牙 搜索周围设备代码流程分析-framework到协议栈流程

    本文详细的将Android 蓝牙扫描周围设备流程进行了梳理,从UI开始扫描到协议栈发送扫描命令到controller,进行了源码分析. 更多源码分析: android-蓝牙A2dp-avrcp-hfp ...

  6. 如何使用ADB或者shell打开Android的usb网络共享

    现在手机不把usb插在电脑上(usb网络共享)这个开关是灰色的不能打开 插上之后可以使用adb命令: #可能的值'mtp', 'ptp', 'rndis', 'midi', 'none' adb sh ...

  7. Android蓝牙Ble基本操作-(连接2)

    前言: 连接采用nordicsemi库,其中nRF Connect也是使用该库. 蓝牙连接库.nordicsemi官网.nRF Connect apk使用教程.nRF Connect apk下载地址. ...

  8. android 自带网络共享,安卓手机如何共享自身网络

    安卓手机如何共享自身网络 我相信很多人都知道路由器跟电脑可以开启wifi,但是有些刚接触手机的人可能不知道其实手机可以共享wifi.那么安卓手机如何共享自身网络呢?下面就让jy135小编来告诉大家吧, ...

  9. android蓝牙在有效范围内自动连接,android – 如何在范围内找到可用的蓝牙设备?...

    这就是我在Activity中搜索蓝牙设备并在ListView中显示其名称和mac地址的方法.除了在ListView中显示设备外,您几乎可以使用发现的BluetoothDevice对象执行任何操作. F ...

最新文章

  1. grub rescue 安装linux,Ubuntu重装启动失败进入修复grub rescue模式
  2. 信息系统项目管理师复习第3小时
  3. jmh气象传真图网站_在冬奥滑雪场,他凭着气象信息,念好一本生意经
  4. C/S和B/S的区别
  5. Scala集合体系:可变集合和不可变集合
  6. Python服务器开发一:python基础
  7. 程序员妈妈的“work-life balance”,直面想象中的困难
  8. excel表格不够怎么添加_这个Excel表格,怎么做的这么漂亮
  9. mysql客户端重置密码是多少,mysql重置root密码
  10. 分布式事务模型--Saga
  11. 使用p4c将P4 14代码转换为16代码
  12. C#基础知识回顾整理
  13. libmodbus 手册翻译
  14. 第一门课神经网络和深度学习(一)-深度学习引言
  15. [数据科学] 通过基因表达监测进行肿瘤预测
  16. android bks证书生成方式
  17. 美版t430笔记本win8系统下装Ubuntu的一些尝试和遇到的问题
  18. 计算机应用基础说课方案,广东省“XX杯”说课大赛计算机应用基础类一等奖作品:PPT写字动画的制作教学设计方案.doc...
  19. 你该选择哪种编程语言来开发App呢?
  20. osi七层模型每一层的含义及介绍

热门文章

  1. 常见二维码上那些奇怪的图案是什么
  2. 微服务架构-ruoyi
  3. python刷步数程序设计_利用python+云函数搭建自己的修改步数api接口
  4. R语言基础作图之点图
  5. 微信小程序纯前端生成海报并保存本地
  6. 解决SVN Can’t open file ‘/XXX/xxx/db/txn-current-lock’错误
  7. Linux命令 磁盘管理——了解磁盘、磁盘分区
  8. 土巴兔CEO王国彬:这五点,决定了你事业的上限
  9. Kubernetes之Service
  10. No tests found for given includes: [xxx.xxx.testList](filter.includeTestsMatching)