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蓝牙详细的 ...
随机推荐
- Go:学习笔记兼吐槽(3)
Go:学习笔记兼吐槽(1) Go:学习笔记兼吐槽(2) Go:学习笔记兼吐槽(3) 数组 Golang 中,数组是值类型. 数组的声明 var arr [10]int 数组的初始化 var arr1 ...
- javascript入门篇(六、正则表达式)
JavaScript 正则表达式 正则表达式是由一个字符序列形成的搜索模式.当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容. 正则表达式可以是一个简单的字符,或一个更复杂的模式.正则表达 ...
- 全球第一免费开源ERP Odoo WMS库存管理高级路线设置详解
概览 路线就是推规则和拉规则的合并整理.Odoo可以配置高级推/拉路线的配置, 例如 : 管理产品的制造链条 为每个产品管理默认位置 根据业务需求在仓库中定义路线, 例如质检, 售后和供应商退货 租用 ...
- dagger2的初次使用
一.使用前准备 1.打开app的build.gradle文件: 顶部停用apt插件: //添加如下代码,应用apt插件 apply plugin: 'com.neenbedankt.android-a ...
- nginx之location配置详解及案例
语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码, ...
- Luogu P5292 [HNOI2019]校园旅行
非常妙的一道思博题啊,不愧是myy出的题 首先我们考虑一个暴力DP,直接开一个数组\(f_{i,j}\)表示\(i\to j\)的路径能否构成回文串 考虑直接拿一个队列来转移,队列里存的都是\(f_{ ...
- Java提取URL某个参数的值
Java提取Url中某个参数的值. public static String getParam(String url, String name) { String params = url.subst ...
- ASP.NET Core 中断请求了解一下(翻译)
ASP.NET Core知多少系列:总体介绍及目录 本文所讲方式仅适用于托管在Kestrel Server中的应用.如果托管在IIS和IIS Express上时,ASP.NET Core Module ...
- 微信小程序小结02-- 完整的demo
小程序确实方便,在移动端方便小个体宣传,不需要服务器和域名,还有客服功能.按朋友的意思,做了一次调整,分成了首页.预约和我的三个页面. 下面说下遇到的几个问题. 01.客服功能 不得不说这个一条龙服务 ...
- LDAP概念和原理介绍
LDAP概念和原理介绍 相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”.“LDAP的主要产品”.“LDAP的基本模型”.“ ...