摘要:一概述本次分析是基于的源码。之后执行了,这个方法我们可以通过获得的蓝牙设备实例进行反射调用。到此,蓝牙自动配对与隐藏对话框的分析结束。
一、概述
本次分析是基于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权限,但是这个权限是系统级应用才有的,所以我们需要对应用进行系统签名,做成系统应用。
到此,蓝牙自动配对与隐藏对话框的分析结束。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/2516.html
摘要:几个不错的开源音视频播放器整理了一下上几个开源的音视频播放器项目,有兴趣的同学可以代码去研究学习。项目地址淘宝开源的一款的扩展是一个针对的扩展主要提供一整套布局方案和布局间的组件复用的问题。 PopsTabView--filter容器 PopsTabView是个filter容器,他可以自动,快速,构建不同筛选样式,自由组合成一组tab. 后续筛选会不断完善补充. 用户只需要,知道自己需...
摘要:一概述本次分析是基于的源码,主要是介绍如何通过反射来打开蓝牙的网络共享以及互联网的连接。蓝牙设备实现自动连接完成。一、概述 本次分析是基于android7.0的源码,主要是介绍如何通过反射来打开蓝牙的网络共享以及互联网的连接。 二、蓝牙的网络共享 1. 网络共享部分源码分析 关于packages/apps/Settings/src/com/android/settings/TetherSet...
摘要:键盘使用说明索引均为出厂默认值升级固件软件支持一些常见问题解答电池开关电池插座转接小板连接首次使用测试步骤蓝牙和切换键盘默认层默认触发层的键配置的功能默认功能层配置的功能默认的快捷键蓝牙配对蓝牙参数蓝牙地址管理升级固件 ...
摘要:开启扫描时需要设备处于配网状态一分类配网子设备可以通过使用手机蓝牙直接扫描获取设备到设备基础信息,再使用配网接口实现设备的本地配网。 (一)分类 (二)设备配置 (三)设备管理 设备管理,大体分为两类,mesh 和 其他 获取设备列表,给涂鸦sdk发送当前房间id...
摘要:系统工具类隐藏底部虚拟按键栏不自动弹出软键盘保持屏幕常亮获取屏幕分辨率获取系统版本获取设备机型获取识别号所需权限以上的系统动态添加权限获取系统当前语言获取设备电量获取设备内存可用大小获取设备内存可用的总量大小获得卡可用总量大小获得卡可用大系统工具类 public class systemUtil { //隐藏ipad底部虚拟按键栏 @RequiresApi(api = B...
阅读 2860·2021-11-23 10:02
阅读 2981·2021-11-16 11:53
阅读 2962·2021-09-23 11:21
阅读 3242·2019-08-30 13:02
阅读 1474·2019-08-29 16:18
阅读 1457·2019-08-29 12:55
阅读 1337·2019-08-26 12:24
阅读 1954·2019-08-26 10:36