当前位置: 移动技术网 > IT编程>移动开发>Android > Android-蓝牙自动配对与隐藏对话框

Android-蓝牙自动配对与隐藏对话框

2019年01月29日  | 移动技术网IT编程  | 我要评论

久舞网,兴趣特长,非卖品广播剧

一、概述

本次分析是基于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权限,但是这个权限是系统级应用才有的,所以我们需要对应用进行系统签名,做成系统应用。

到此,蓝牙自动配对与隐藏对话框的分析结束。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网