java利用安卓蓝牙上网_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) 先反射获取已连接设备,进行断开,再连接需要连接的设备。
蓝牙设备实现自动连接完成。
java利用安卓蓝牙上网_Android-蓝牙的网络共享与连接分析相关推荐
- java web 蓝牙打印_android 蓝牙打印机示例
[实例简介]关于蓝牙打印:HTML5开发移动页面.链接蓝牙打印机,打印文字.二位码.图片. [实例截图] [核心代码] BluetoothPrinterDemo-master ├── README.m ...
- java 蓝牙打印_Android蓝牙打印机,带你真正了解各种打印格式
注意:本文原创,转载请注明出处.欢迎关注我的 简书 . 本文主要讲解蓝牙打印机在打印小票的过程中,如何打印各种常见格式.由于之前需要调试打印格式,但是苦于网上没有详细的讲解教程,无奈只能自给自足,自己 ...
- java 蓝牙打印_Android蓝牙打印(app源码)
[实例简介]android 蓝牙打印机(ESC/POS 热敏打印机),打印菜单小票和图片,对蓝牙配对和连接打印功能进行了封装,让你超快实现蓝牙打印功能 [实例截图] [核心代码] package co ...
- java类安卓app 简介_android.app.Activity 的介绍
文章可随意转载,但务必注明源地址 发现当前Android的资料不是很多,而且对于Activity的介绍也很少,所以把官方文档的android.app.Activity的介绍翻译了一下,加入了一些自己的 ...
- java检测安卓程序退出_Android:应用程序退出后出现奇怪的NameNotFoundException
安装ADT r22之后,每次关闭应用程序时,我都会在LogCat中收到此异常: E/LuckyLauncherView(227): in setViewEveryArea() E/LuckyLaunc ...
- java代码请求2次_Android基于OkHttpUtils网络请求的二次封装
OkHttpUtils网络请求为什么进行二次封装? 1.减少代码量 2.后期换网络处理框架方便 二次封装的实现原理 1.将网络请求提取在一个方法中 2.对里面的可变参数,可以通过参数传递过去,也可以提 ...
- linux 三星网络共享,基于安卓的rndis驱动的usb网络共享的实现
开发环境: 硬件;三星s5pv210 软件;linux3.0.8内核(用于android) 文件系统;嵌入式qt文件系统 内核配置 --- USB Gadget Support ...
- android usb rndis驱动,基于安卓的rndis驱动的usb网络共享的实现
开发环境: 硬件;三星s5pv210 软件;linux3.0.8内核(用于android) 文件系统;嵌入式qt文件系统 内核配置 --- USB Gadget Support ...
- win10蓝牙android上网,Win10系统如何共享安卓手机蓝牙上网(非热点)
教程通用windows系统,不管win7和win7,原理是一样的.在外地出差时,经常会需要笔记本上网,而我们的手机流量现在一般来说是很充裕的,如何设置手机通过蓝牙将网络共享给电脑的方法. 操作步骤: ...
最新文章
- 神了,无意中发现一位1500道的2021LeetCode算法刷题pdf笔记
- 用ASP自动生成SQL数据库的安装源程序
- Sql sever 分组排序
- 2.3.6 生产者消费者问题
- 周五话营销 | 数据分析强势解决营销人三大痛点
- Leetcode代码练习(三)
- 精美的手机界面设计素材和线框图设计工具推荐
- mysql jion 实现原理_MySQL-join的实现原理、优化及NLJ算法
- Calico搭建配置
- B站签约冯提莫,能否靠直播业务实现年入一百亿目标?
- SaaS 公司如何应对 On-Call 挑战?
- 在CentOS 7中使用Sendmail通过PHP发送邮件
- VRRP技术原理与注意点
- win7启动黑屏安全模式下卸载驱动图解
- 如何在dw中html字体变大,DW网页的字体大小怎么设置
- 计算机学院 储昭坤,计算机与信息学院“紫罗兰”团队开展志愿服务活动
- es6 混合commjs_嵌入式JavaScript引擎 – mjs
- 《Adobe Premiere Pro CS6中文版经典教程》——复习题
- 如何将Word中数据转换为excel表格
- jsPlumb使用学习-在线流程设计器demo参考说明
热门文章
- ds90cr286调试新得
- smtplib.SMTPConnectError: (554, b‘Local Policy Violation‘)
- 微信门店小程序怎么开发
- JavaScript中 Touch 事件详解
- fgo1月23号服务器维护,FGO1月21日活动维护公告 关闭圣诞四期活动
- 动态规划之打家劫舍(House Robber)-C语言实现
- JSP水产品销售系统
- 图像处理基础 || (二) 彩色图像转灰度图像
- python脚本 游戏赚金币兑换钱_一种王者荣耀刷金币方法(python脚本)
- 养蛙时代猛然来袭,Bingdata为您解读《旅行青蛙》爆红原因