蓝牙配对

权限

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

使用蓝牙要用到官方的蓝牙适配器  android.bluetooth.BluetoothAdapter   和广播

先判断手机是否支持蓝牙

private void initBluetooth() {
        bluetoothAdapter = android.bluetooth.BluetoothAdapter.getDefaultAdapter();
        if (bluetoothAdapter == null) {
            Toast.makeText(BlueActivity.this, "设备不支持蓝牙", Toast.LENGTH_LONG).show();
        }
    }

广播

    private BroadcastReceiver bluetoothreceiver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (intent.getAction()){
                case BluetoothDevice.ACTION_FOUND:
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    Logger.e("ACTION_FOUND " + device.toString());
                    //adapter.add(device);
                    break;

                case android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_STARTED:
                    Logger.e("开始扫描");
                    break;
                case android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
                    Logger.e("扫描结束");
                    break;
            }

        }
    };

注册接受者   onDestroy时要注销

    private void initReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothDevice.ACTION_FOUND);
        filter.addAction(android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        filter.addAction(android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(bluetoothreceiver, filter);
    }

开启关闭蓝牙,扫描停止。

    public void bluetooth(View view) {
        switch (view.getId()) {
            case R.id.btn_open_bluetooth:
                if (!bluetoothAdapter.isEnabled()) {
                    bluetoothAdapter.enable();
                }
                break;

            case R.id.btn_close_bluetooth:
                if (bluetoothAdapter.isEnabled()) {
                    bluetoothAdapter.disable();
                }
                break;

            case R.id.btn_scan:
                bluetoothAdapter.startDiscovery();
                break;

            case R.id.btn_stop_scan:
                bluetoothAdapter.cancelDiscovery();
                break;
        }
    }

如果想用list显示 扫描出来的设备,实体可以用官方的 BluetoothDevice

通过这个device 可以获取很多属性

getBondState   返回10 代表没有配对   12 代表已经配对  11代表配对中

getAddress    代表蓝牙地址  有的手机mac地址和蓝牙非常相似,只有几个字符不同

getName   可以手机的名字 这个可以在设置里面修改

getTpye   获取对方设备支持的蓝牙协议  通常都是 返回1

    public static final int DEVICE_TYPE_CLASSIC = 1;
    public static final int DEVICE_TYPE_DUAL = 3;
    public static final int DEVICE_TYPE_LE = 2;
    public static final int DEVICE_TYPE_UNKNOWN = 0;

getUuids    这里有一个s,说明肯定不止一个,至于为什么 我也不知道

值得注意的是  如果没有进行配对,用这个方法只会得到一个null,而只有配对之后再调用这个方法才会得到 一个 ParcelUuid[] 对象

经过测试 发现一部手机是8个 一部手机是10个

其中一个的uuid

0000112d-0000-1000-8000-00805f9b34fb

除了红色部分会变化,其他地方都不会改变,两部手机肯定也会出现同样的uuid的情况,到底用来干啥的,暂时不清楚

输出 每个uuid的方法

Parcelable[] uuidExtra = device.getUuids();
for (int i=0; i<uuidExtra.length; i++) {
      String uuid = uuidExtra[i].toString();
    }

在广播 中接受到 BluetoothDevice.ACTION_FOUND 时,可以获取搜索到的设备

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

如果想加载到list上  可以用list的适配器add

现在list上显示了搜索出来的设备,如果想通过点击来配对目标设备

在安卓4.4  Api 19之后,配对起来很简单

device.createBond();

此时双方手机界面会显示

但是Api 19之前是不能用这个方法的,系统隐藏了,不过可以用反射

                            try {
                                Method createBondMethod  = BluetoothDevice.class.getMethod("createBond");
                                createBondMethod.invoke(device);
                            } catch (NoSuchMethodException e) {
                                e.printStackTrace();
                            } catch (InvocationTargetException e) {
                                e.printStackTrace();
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            }
时间: 2024-08-10 23:14:45

蓝牙配对的相关文章

android开发之蓝牙配对连接的方法

最近在做蓝牙开锁的小项目,手机去连接单片机总是出现问题,和手机的连接也不稳定,看了不少蓝牙方面的文档,做了个关于蓝牙连接的小结. 在做android蓝牙串口连接的时候一般会使用 ? 1 2 3 4 5 6 7 8 BluetoothSocket tmp = null; // Get a BluetoothSocket for a connection with the // given BluetoothDevice try {          tmp = device.createRfcom

Android蓝牙配对

上一篇博客介绍了Android ble的一些情况. http://blog.csdn.net/guijiaoba/article/details/41172403 蓝牙如果链接好,能够读写,基本上完成了.蓝牙还有个比较烦人的东西,就是蓝牙配对. Android ble4.0使用的配对方式和原先版本的配对方式不一样. 看了网上很多地方都是hellogv大神的方法,这个真心不错. http://blog.csdn.net/hellogv/article/details/6042091 本着认真的态度

蓝牙配对过程分析

1.概念 配对是指"Master和Slave通过协商确立用于加(解)密的key的过程.指的是下图中的第7部分. 2.配对方法 Master和Slave有两种可选的配对方法:legacy pairing和Secure Connections.从命名上看,前者是过去的方法,后者是新方法.选择的依据是:当Master和Slave都支持Secure Connections(新方法)的时候,则使用Secure Connections.否则,使用legacy pairing. 3.配对过程 配对过程如图所示

Android蓝牙自动配对Demo,亲测好使!!!

蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details/52400782 经过最近一段时间得研究,针对网上给出的案例.总结了一个亲测好使的Demo. 说明如下: 1.本Demo用来连接蓝牙设备HC-05,如果你要连接其他蓝牙设备,注意修改相关名字以及修改设备初试pin值. 2.将Demo安装在Android手机上,点击按钮,可以实现与目标蓝牙设备的自动

蓝牙简单配对(Simple Pairing)协议及代码流程简述

kangear注: 文章转自:http://blog.csdn.net/myxmu/article/details/12217135 原文把图给搞丢了,但是文章太好了,这个时候我就发挥多年的Google和人脉关系根据链接找到了,补上图(这个图是MTK内部用图). [DESCRIPTION] 在BT2.1及之后版本,蓝牙协议有在传统的密码配对(PIN Code Pairing)之外,新增一种简单配对(Simple Pairing)的方式.这种新的配对方式操作更为简单.安全性也更强.目前市面上大部分

android 实现蓝牙自动配对连接

BluetoothConnectActivityReceiver.java:监听蓝牙配对的广播 代码: package com.imte.Broadcast; import com.imte.utils.ClsUtils; import com.itme.ActivityClass.R; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.conten

如何实现android蓝牙开发 自动配对连接,并不弹出提示框

如何实现android蓝牙开发 自动配对连接,并不弹出提示框 之前做一个android版的蓝牙,遇到最大的难题就是自动配对. 上网查资料说是用反射createBond()和setPin(),但测试时进行配对还是会出现提示,但配对是成功了 我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助了我. 在源码 BluetoothDevice 类中还有两个隐藏方法 cancelBondProcess()和cancelPairingUserInput() 这两个方法一个是取消配对进

Android 屏蔽蓝牙连接时的首次配对系统弹窗

连接配对密码已知且固定的蓝牙设备时,明明在代码里就可以完成配对,却依旧被系统弹出配对窗口. 这无疑是令人难受的. 所以,便尝试着去屏蔽掉这个配对窗口. 要点: 中断系统发出的蓝牙配对广播 需要用到ClsUtils开源框架 个人测试在Android 4.4上成功拦截,在4.2上不行,也许是高版本把蓝牙配对广播设为了有序广播? code: public class BluetoothConnectReceiver extends BroadcastReceiver { private final S

Android 蓝牙开发之搜索、配对、连接、通信大全

        蓝牙( Bluetooth®):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据 交换(使用2.4-2.485GHz的ISM波段的UHF无线电波).蓝牙设备最多可以同时和7个其它蓝牙设备建立连接,进 行通信,当然并不是每一个蓝牙都可以达到最大值.下面,我们从蓝牙的基本概念开始,一步一步开始了解蓝牙. 基本概念: 安卓平台提供对蓝牙的通讯栈的支持,允许设别和其他的设备进行无线传输数据.应用程序层通过安卓API来调用蓝牙的相关功 能,这些API使程序无线连接