<commit_before>---
layout: post
title: Android 蓝牙自动配对
author: kinshines
date:   2017-07-30
categories: android
permalink: /archivers/android-bluetooth-autopair
---

<p class="lead">蓝牙自动配对，即搜索到其它蓝牙设备之后直接进行配对，不需要弹出配对确认框或者密钥输入框。</p>
说明如下：

1. 本Demo用来连接蓝牙设备HC-05，如果要连接其他蓝牙设备，注意修改相关名字以及修改设备初始pin值。
2. 将Demo安装在Android手机上，点击按钮，可以实现与目标蓝牙设备的自动配对。
3. 若目标蓝牙设备为Android手机的蓝牙，则只能保证本设备不弹出配对框，对方还是会弹出配对框。但是！！不管目标蓝牙点击“确认”or“取消”，在本设备中都显示已经成功配对。实测表明，确实已经配对了，可以进行数据传输。
4. 由于使用了广播机制，所以需要在Androidmanifest.xml进行如下配置：

    先配置蓝牙使用权限：

    {% highlight xml %}
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
    {% endhighlight %}
    
    
    然后配置action，将需要用到的广播进行注册

    {% highlight xml %}
    <receiver android:name="com.example.mybuletooth.broadcast.BluetoothReceiver" >
      <intent-filter android:priority="1000">
          <action android:name="android.bluetooth.device.action.PAIRING_REQUEST"/>
          <action android:name="android.bluetooth.device.action.FOUND" />
      </intent-filter>
    </receiver>
    {% endhighlight %}

程序运行流程：

1. 点击按钮，判断蓝牙是否打开，执行bluetoothAdapter.startDiscovery();由本地蓝牙设备扫描远程蓝牙设备，startDiscovery()方法是一个异步方法，调用后立即返回。该方法会进行蓝牙设备的搜索，持续12秒。
2. 搜索时，系统会发送3个广播，分别为：

    ACTION_DISCOVERY_START:开始搜索 
    
    ACTION_DISCOVERY_FINISHED:搜索结束
    
    ACTION_FOUND:找到设备
    
    该Intent中包含两个extra fields;   

3. 在广播接收类中BluetoothReceiver.java中，当设备找到之后会执行其onReceive方法。<commit_msg>autopair<commit_after>---
layout: post
title: Android 蓝牙自动配对
author: kinshines
date:   2017-07-30
categories: android
permalink: /archivers/android-bluetooth-autopair
---

<p class="lead">蓝牙自动配对，即搜索到其它蓝牙设备之后直接进行配对，不需要弹出配对确认框或者密钥输入框。</p>
说明如下：

1. 本Demo用来连接蓝牙设备HC-05，如果要连接其他蓝牙设备，注意修改相关名字以及修改设备初始pin值。
2. 将Demo安装在Android手机上，点击按钮，可以实现与目标蓝牙设备的自动配对。
3. 若目标蓝牙设备为Android手机的蓝牙，则只能保证本设备不弹出配对框，对方还是会弹出配对框。但是！！不管目标蓝牙点击“确认”or“取消”，在本设备中都显示已经成功配对。实测表明，确实已经配对了，可以进行数据传输。
4. 由于使用了广播机制，所以需要在Androidmanifest.xml进行如下配置：

    先配置蓝牙使用权限，然后配置action，将需要用到的广播进行注册：

    {% highlight xml %}
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 

    <receiver android:name="com.example.mybuletooth.broadcast.BluetoothReceiver" >
      <intent-filter android:priority="1000">
          <action android:name="android.bluetooth.device.action.PAIRING_REQUEST"/>
          <action android:name="android.bluetooth.device.action.FOUND" />
      </intent-filter>
    </receiver>
    {% endhighlight %}

程序运行流程：

1. 点击按钮，判断蓝牙是否打开，执行bluetoothAdapter.startDiscovery();由本地蓝牙设备扫描远程蓝牙设备，startDiscovery()方法是一个异步方法，调用后立即返回。该方法会进行蓝牙设备的搜索，持续12秒。
2. 搜索时，系统会发送3个广播，分别为：

    ACTION_DISCOVERY_START:开始搜索 
    
    ACTION_DISCOVERY_FINISHED:搜索结束
    
    ACTION_FOUND:找到设备
    
    该Intent中包含两个extra fields;   

3. 在广播接收类中BluetoothReceiver.java中，当设备找到之后会执行其onReceive方法。
{'fraction_non_alphanumeric': 0.11685159500693482, 'fraction_numerical': 0.016643550624133148, 'mean_word_length': 5.177730192719486, 'pattern_counts': {'":': 0, '<': 23, '<?xml version=': 0, '>': 23, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 5}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3130193', 'n_tokens_mistral': 1551, 'n_tokens_neox': 1771, 'n_words': 113}