Android-蓝牙自动配对与隐藏对话框
一、概述
本次分析是基于Android7.0的源码。
二、自动配对分析过程
首先,我们分析一下源码的自动配对过程,packages/apps/Settings/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
当我们在手机的设置中点击配对某个设备后做了如下事情:

然后我们查看btPreference(BluetoothDevicePreference.java)的onClicked()方法,在同目录下BluetoothDevicePreference.java中


mCachedDevice是CachedBluetoothDevice.java的实例,它的位置在:frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java

最终,执行了蓝牙设备的createBond()方法,所以进行自动配对的思路形成。
1)注册监听BluetoothDevice.ACTION_FOUND广播;
2)调用bluetoothAdapter.startDiscovery()方法搜索附近的蓝牙设备;
3)当收到广播后,执行intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)方法获取蓝牙设备实例,筛选出需要配对的设备,然后通过反射调用BluetoothDevice的createBond()方法;
三、隐藏对话框分析过程
既然要隐藏对话框,那么我们研究一下对话框何时弹出?以及弹出后确认配对做了什么?通过查看源码发现:package/apps/Settings/src/com/android/settings/bluetooth/BluetoothPairingRequest.java

我们可以看到在这个类中,通过注册监听BluetoothDevice.ACTION_PAIRING_REQUEST广播,当接收到该广播后启动对话框。然后我们在查看一下BluetoothPairingDialog类中做了什么?在同目录下的的BluetoothPairingDialog.java类中:

可以看到,点击确认后,调用onPair()方法。

之后执行了mDevice.setPairingConfirmation(true),这个方法我们可以通过获得的蓝牙设备实例进行反射调用。
所以,我们的思路就形成了:
1)注册监听BluetoothDevice.ACTION_PAIRING_REQUEST广播,设置高的优先级,接收到广播后执行abortBroadcast()方法,防止广播的继续传播;
2)接收到广播后,执行intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)方法获取蓝牙设备实例,然后通过反射调用BluetoothDevice的setPairingConfirmation(true);
四、遇到的问题
1)关于setPairingConfirmation(true)方法。
我们查看一下这个方法的源码frameworks/base/core/android/bluetooth/bluetoothDevice.java

此方法需要BLUETOOTH_PRIVILEGED权限,但是这个权限是系统级应用才有的,所以我们需要对应用进行系统签名,做成系统应用。
到此,蓝牙自动配对与隐藏对话框的分析结束。
Android-蓝牙自动配对与隐藏对话框的更多相关文章
- Android蓝牙自动配对Demo,亲测好使!!!
蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details ...
- Android蓝牙自动配对Demo,亲测好使!!!(转)
蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details ...
- android 实现蓝牙自动配对连接
BluetoothConnectActivityReceiver.java:监听蓝牙配对的广播 代码: package com.imte.Broadcast; import com.imte.util ...
- Android 蓝牙开发之搜索、配对、连接、通信大全
蓝牙( Bluetooth®):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据 交换(使用2.4-2.485GHz的ISM波段的UHF无线电波).蓝牙设备最 ...
- Android 蓝牙 BLE 开发笔记
最近公司头戴换了一块蓝牙4.0 BLE模块,所以我们Android组要适配 BLE.Android BLE 需要 4.3 以上系统,api 还是非常简单的, 第一步就是扫描, 扫描到设备后就可以连接了 ...
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
之前做一个android版的蓝牙 与血压计通讯的项目,遇到最大的难题就是自动配对. 上网查资料说是用反射createBond()和setPin(),但测试时进行配对还是会出现提示,但配对是成功了 我就 ...
- audio与video控件/标签的隐藏,iso/Android下自动全屏播放,短暂黑屏问题
(一)audio音频标签 <audio src="xxx.mp3"></audio> (二)video视频标签 <video src="xx ...
- Android蓝牙学习笔记
一 Bluetooth基本概念 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备.计算机及其终端设备.各种数字数据系统.甚至家用电器采用无线方式联接起来.它的传输距离为10cm-10m,如果增加 ...
- Android蓝牙
代码地址如下:http://www.demodashi.com/demo/12772.html 前言:最近,新换了一家公司,公司的软件需要通过蓝牙与硬件进行通讯,于是趁此机会将Android蓝牙详细的 ...
随机推荐
- Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 存储键值对我们首先想到HashMap,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞,它是线程不安全的,并且存储的key只能有一个为 ...
- 微服务容错限流Hystrix入门
为什么需要容错限流 复杂分布式系统通常有很多依赖,如果一个应用不能对来自依赖 故障进行隔离,那么应用本身就处在被拖垮的风险中.在一个高流量的网站中,某个单一后端一旦发生延迟,将会在数秒内导致 所有应用 ...
- 六大设计原则(一)SRP单一职责原则
单一职责原则SRP(Single reponsibility principle) BO(Business Object):业务对象 Biz(Business Logic):业务逻辑 SRP最简单的例 ...
- U盘制作微pe工具箱(实战)
分享人:广州华软 浩言 前言 相信大家平时生活中还是工作上使用电脑的时间还是比较多的,有时候电脑出现故障,比如系统文件损坏,没办法正常开机,或者是开机密码忘了,想要重装系统等,下面我推荐一个U盘启动项 ...
- 泛微关于js设计的一些小技巧
1.关于泛微流程的js设计 泛微oa可以插入javascript可以diy自己想要的表单页面前端功能.如果有前端开发经验,或者熟练使用jQuery的话,这将变得非常容易!同时泛微OA内部有很多库,包括 ...
- arcgis画矢量图
总图 首先建立目标文件夹和目标文件(shp文件) 现在H:\ex_gis\下新建test文件夹,起名为test,再此目录下建立一个线要素文件. 在这里选择要素类型.这里以线为例,点面类推即可. 设置坐 ...
- 1. [mmc subsystem] 概念与框架
一.概念 1.mmc的概念 mmc有很多种意义,具体如下: mmc MultiMedia Card,多媒体存储卡, 但后续泛指一个接口协定(一种卡式),能符合这接口的内存器都可称作mmc储存体. 主要 ...
- 云时代的.NET
编程语言从最初的0101机器码到汇编语言再到面向对象的编程,不断的发展,整个发展趋势呈现高内聚.低耦合.可重用.可理解的特点.最早编程是用机器码,人的大脑不像电脑,无法处理0101:后来汇编语言还是太 ...
- javascript中apply、call和bind的区别及方法详解
文章目录 apply.call apply.call 区别 apply.call实例 数组之间追加 获取数组中的最大值和最小值 验证是否是数组(前提是toString()方法没有被重写过) 类(伪 ...
- composer PHP Fatal error致命错误
可以尝试临时禁用composer插件: composer global remove fxp/composer-asset-plugin --no-plugins