一、概述

本次分析是基于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) 先反射获取已连接设备,进行断开,再连接需要连接的设备。

蓝牙设备实现自动连接完成。

java利用安卓蓝牙上网_Android-蓝牙的网络共享与连接分析相关推荐

  1. java web 蓝牙打印_android 蓝牙打印机示例

    [实例简介]关于蓝牙打印:HTML5开发移动页面.链接蓝牙打印机,打印文字.二位码.图片. [实例截图] [核心代码] BluetoothPrinterDemo-master ├── README.m ...

  2. java 蓝牙打印_Android蓝牙打印机,带你真正了解各种打印格式

    注意:本文原创,转载请注明出处.欢迎关注我的 简书 . 本文主要讲解蓝牙打印机在打印小票的过程中,如何打印各种常见格式.由于之前需要调试打印格式,但是苦于网上没有详细的讲解教程,无奈只能自给自足,自己 ...

  3. java 蓝牙打印_Android蓝牙打印(app源码)

    [实例简介]android 蓝牙打印机(ESC/POS 热敏打印机),打印菜单小票和图片,对蓝牙配对和连接打印功能进行了封装,让你超快实现蓝牙打印功能 [实例截图] [核心代码] package co ...

  4. java类安卓app 简介_android.app.Activity 的介绍

    文章可随意转载,但务必注明源地址 发现当前Android的资料不是很多,而且对于Activity的介绍也很少,所以把官方文档的android.app.Activity的介绍翻译了一下,加入了一些自己的 ...

  5. java检测安卓程序退出_Android:应用程序退出后出现奇怪的NameNotFoundException

    安装ADT r22之后,每次关闭应用程序时,我都会在LogCat中收到此异常: E/LuckyLauncherView(227): in setViewEveryArea() E/LuckyLaunc ...

  6. java代码请求2次_Android基于OkHttpUtils网络请求的二次封装

    OkHttpUtils网络请求为什么进行二次封装? 1.减少代码量 2.后期换网络处理框架方便 二次封装的实现原理 1.将网络请求提取在一个方法中 2.对里面的可变参数,可以通过参数传递过去,也可以提 ...

  7. linux 三星网络共享,基于安卓的rndis驱动的usb网络共享的实现

    开发环境: 硬件;三星s5pv210 软件;linux3.0.8内核(用于android) 文件系统;嵌入式qt文件系统 内核配置 --- USB Gadget Support             ...

  8. android usb rndis驱动,基于安卓的rndis驱动的usb网络共享的实现

    开发环境: 硬件;三星s5pv210 软件;linux3.0.8内核(用于android) 文件系统;嵌入式qt文件系统 内核配置 --- USB Gadget Support             ...

  9. win10蓝牙android上网,Win10系统如何共享安卓手机蓝牙上网(非热点)

    教程通用windows系统,不管win7和win7,原理是一样的.在外地出差时,经常会需要笔记本上网,而我们的手机流量现在一般来说是很充裕的,如何设置手机通过蓝牙将网络共享给电脑的方法. 操作步骤: ...

最新文章

  1. 神了,无意中发现一位1500道的2021LeetCode算法刷题pdf笔记
  2. 用ASP自动生成SQL数据库的安装源程序
  3. Sql sever 分组排序
  4. 2.3.6 生产者消费者问题
  5. 周五话营销 | 数据分析强势解决营销人三大痛点
  6. Leetcode代码练习(三)
  7. 精美的手机界面设计素材和线框图设计工具推荐
  8. mysql jion 实现原理_MySQL-join的实现原理、优化及NLJ算法
  9. Calico搭建配置
  10. B站签约冯提莫,能否靠直播业务实现年入一百亿目标?
  11. SaaS 公司如何应对 On-Call 挑战?
  12. 在CentOS 7中使用Sendmail通过PHP发送邮件
  13. VRRP技术原理与注意点
  14. win7启动黑屏安全模式下卸载驱动图解
  15. 如何在dw中html字体变大,DW网页的字体大小怎么设置
  16. 计算机学院 储昭坤,计算机与信息学院“紫罗兰”团队开展志愿服务活动
  17. es6 混合commjs_嵌入式JavaScript引擎 – mjs
  18. 《Adobe Premiere Pro CS6中文版经典教程》——复习题
  19. 如何将Word中数据转换为excel表格
  20. jsPlumb使用学习-在线流程设计器demo参考说明

热门文章

  1. ds90cr286调试新得
  2. smtplib.SMTPConnectError: (554, b‘Local Policy Violation‘)
  3. 微信门店小程序怎么开发
  4. JavaScript中 Touch 事件详解
  5. fgo1月23号服务器维护,FGO1月21日活动维护公告 关闭圣诞四期活动
  6. 动态规划之打家劫舍(House Robber)-C语言实现
  7. JSP水产品销售系统
  8. 图像处理基础 || (二) 彩色图像转灰度图像
  9. python脚本 游戏赚金币兑换钱_一种王者荣耀刷金币方法(python脚本)
  10. 养蛙时代猛然来袭,Bingdata为您解读《旅行青蛙》爆红原因