zoukankan      html  css  js  c++  java
  • 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权限,但是这个权限是系统级应用才有的,所以我们需要对应用进行系统签名,做成系统应用。

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

    2)在API19之前的版本也就是Android4.4,createBond()和setPairingConfirmation(true)方法需要通过反射来调用,在之后的版本可以直接使用。

  • 相关阅读:
    java的应用项目
    项目评审ppt的纲要
    Spark环境搭建
    spark 环境搭建坑
    redis cluster 实现
    hadoop环境搭建编译
    centos 网络配置
    自定义shell开头PS1
    Centos. Mac 通过nfs 搭建共享目录
    mac系统中实现vitualBox中访问内网端口
  • 原文地址:https://www.cnblogs.com/doubleWin/p/10330686.html
Copyright © 2011-2022 走看看