一、概述

本次分析是基于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. VMware vRealize Network Insight 6.2 发布 - 网络和安全可视化分析

    发现.优化应用安全性和网络连接解决方案并对其进行故障排除 VMware vRealize Network Insight 可帮助您跨混合和多云环境构建经过优化且高度可用的安全网络基础架构.它提供了网络 ...

  2. Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志

    Tethering技术在移动平台上已经运用的越来越广泛了.它能够把移动设备当做一个接入点,其它的设备能够通过Wi-Fi.USB或是Bluetooth等方式连接到此移动设备.在Android中能够将Wi ...

  3. Android 蓝牙开发之搜索、配对、连接、通信大全

            蓝牙( Bluetooth®):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据 交换(使用2.4-2.485GHz的ISM波段的UHF无线电波).蓝牙设备最 ...

  4. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6666491 在前面一篇文章Android系统匿 ...

  5. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

    随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityManager  类,用 ...

  6. Android编程 获取网络连接状态 及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  7. Android编程获取网络连接状态及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  8. Android蓝牙BLE开发,扫描、连接、发送和读取信息;

    1.BLE开发权限 Android蓝牙BLE开发须打开蓝牙权限和6.0位置权限: <uses-permission android:name="android.permission.B ...

  9. Android蓝牙A2DP连接实现

    代码地址如下:http://www.demodashi.com/demo/14624.html 开发环境: 开发工具:Androidstudio 适配机型:honor8(Android6.0), 坚果 ...

随机推荐

  1. 我不是bug神(JVM问题排查)

    Story background 回望2018年12月,这也许是程序员们日夜不得安宁的日子,皆因各种前线的系统使用者都需要冲业绩等原因,往往在这个时候会向系统同时写入海量的数据,当我们的应用或者数据库 ...

  2. 使用ConcurrentHashMap一定线程安全?

    前言 老王为何半夜惨叫?几行代码为何导致服务器爆炸?说好的线程安全为何还是出问题?让我们一起收看今天的<走进IT> 正文 CurrentHashMap出现背景 说到ConcurrentHa ...

  3. .Net Core ORM选择之路,哪个才适合你

    因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别的慢,导致系统体验比较差好多都改写Sql实现. 所以我 ...

  4. 004. 前端跨域资源请求: JSONP/CORS/反向代理

    1.什么是跨域资源请求? https://www.cnblogs.com/niuli1987/p/10252214.html 同源: 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有 ...

  5. Android SQLite 数据库学习

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...

  6. github 进阶说明

    目录 github 进阶说明 前言 三个目录树 重置 git reset 增加路径的reset 检出 checkout 带路径的checkout 仓库 数据对象 其他 资料 github 进阶说明 前 ...

  7. 和我一起学习爬虫之HTTP/HTTPS抓包工具--Fiddler

    HTTP/HTTPS抓包工具--Fiddler Fiddler[ˈfɪdlə(r)] 1. HTTP代理神器Fiddler Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP ...

  8. 新更新kb4493472导致无法正常开机

    昨天陆续接到电话,说是系统更新后电脑不能正常使用,症状基本是开机到欢迎界面就出现各种各样的状况,比如鼠标能动,其他无反应;欢迎界面结束后黑屏,只有鼠标能动:开机后正常,但电脑使用很卡等等状况.因为昨天 ...

  9. 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下)

    上一篇文章:https://www.cnblogs.com/cgzl/p/9734083.html 处理数据 嵌套字段 看例子: 我想查看viewer下的repositories.注意里面的edges ...

  10. Notepad++ 安装连接服务器的NppFTP插件

    用Notepad++连接服务器,可以随时编辑一些文件不用特意下载.有时重做系统经常忘记一些插件备份到了哪.再此做个记录,方便重新安装. 下载完NppFTP插件,解压后将bin文件夹下的NppFTP.d ...