Android蓝牙使用详解(普通蓝牙)1

简介: Android蓝牙使用详解(普通蓝牙)

前言:最近,新换了一家公司,公司的软件需要通过蓝牙与硬件进行通讯,于是趁此机会将Android蓝牙详细的了解了一下。本篇内容是基于普通蓝牙。

  Android系统已经为我们提供了操作蓝牙的API,我们只要通过这些API便可以操控蓝牙,实现打开蓝牙设备,搜索周围蓝牙设备,与已连接的设备进行数据传输等操作。

  阅读本文后你将会有一下收获

  • 知道怎样打开手机蓝牙。
  • 知道怎样获取已经进行蓝牙配对过的设备。
  • 知道怎样进行设备之间的连接以及通讯。
  • 知道怎样设置蓝牙设备可进行搜索到以及设置可被搜索的时长

蓝牙操作

打开手机蓝牙

设置蓝牙权限

  要在应用中使用蓝牙功能,必须声明蓝牙权限 BLUETOOTH。您需要此权限才能执行任何蓝牙通信,例如请求连接、接受连接和传输数据等。设置权限的代码如下

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

判断是否支持蓝牙

在打开手机蓝牙之前首先判断手机是否支持蓝牙,判断是否支持蓝牙的代码如下

 BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter == null) {
            Toast.makeText(this,"当前设备不支持蓝牙!",Toast.LENGTH_SHORT).show();
        }

解释一下BluetoothAdapter的作用

BluetoothAdapter代表本地设备蓝牙适配器**,BluetoothAdapter**可让您执行基本的蓝牙任务,如启动设备发现,查询绑定(配对)设备列表,使用已知的MAC地址实例化 BluetoothDevice,并创建 BluetoothServerSocket以侦听来自其他设备的连接请求,并开始扫描蓝牙LE设备。

如果设备支持蓝牙,则进行打开蓝牙的操作

打开蓝牙

  调用 BluetoothAdapterisEnabled() 方法来检查当前是否已启用蓝牙。 如果此方法返回 false,则表示蓝牙处于停用状态。想要启用蓝牙,则需要设置Intent的Action为ACTION_REQUEST_ENABLE ,然后通过startActivityForResult()来启动蓝牙。具体的代码如下

 if (!mBluetoothAdapter.isEnabled()) {
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
            }

这段代码执行完后,手机则会弹出是否允许开启蓝牙的提示框,如下图

f244fa9f9825779eea2ab03ae69b7f5.png

当用户点击“拒绝”或则“允许”的时候 Activity 将会在 onActivityResult() 回调中收到结果代码。

  当成功开启蓝牙时 Activity 将会在 onActivityResult() 回调中收到 RESULT_OK 结果代码。 如果由于某个错误(或用户响应“拒绝”)而没有启用蓝牙,则结果代码为 RESULT_CANCELED。我们便可以重写 onActivityResult()方法来判断蓝牙是否已经成功开启。

查询设备

查询已经配对的设备

  在搜索设备之前,我们应该先查找已经进行配对的设备,如果目标设备已经进行过配对,则不需要进行设备搜索。因为,执行设备发现对于蓝牙适配器而言是一个非常繁重的操作过程,并且会消耗大量资源。可以通过BluetoothAdaptergetBondedDevices()方法来查询已经配对的设备,具体代码如下

 private void checkAlreadyConnect() {
     //获取已经配对的集合
        Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
            mArrayAdapter.notifyDataSetChanged();
        }
    }

搜索设备

  要搜索周围的设备,只需调用BluetoothAdapterstartDiscovery()方法即可。

注:搜索设备是在异步进程中,通常会有12秒的时间来进行查询扫描,之后对每台发现的设备进行页面扫描,以检索其蓝牙名称。

调用startDiscovery()方法的时候还需要新增如下权限

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

在发现设备后系统会进行ACTION_FOUND的广播,因此,我们需要一个广播接收者来接收广播,以下代码为发现设备后如何注册来处理广播

 // 新建一个 BroadcastReceiver来接收ACTION_FOUND广播
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            // 发现设备
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                //获得 BluetoothDevice
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                //向mArrayAdapter中添加设备信息
                mSearchAdapter.add(device.getName() + "\n" + device.getAddress());
                mSearchAdapter.notifyDataSetChanged();
            }
        }
    };
    //设置IntentFilter
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

注意:执行设备发现对于蓝牙适配器而言是一个非常繁重的操作过程,并且会消耗大量资源。 在找到要连接的设备后,确保始终使用cancelDiscovery() 停止发现,然后再尝试连接。不应该在处于连接状态时执行发现操作。

启用可检测性

  Android 设备默认处于不可检测到状态。 用户可通过系统设置将设备设为在有限的时间内处于可检测到状态,或者,应用可请求用户在不离开应用的同时启用可检测性。

  如果您希望将本地设备设为可被其他设备检测到,请使用 ACTION_REQUEST_DISCOVERABLE 操作 Intent 调用 startActivityForResult(Intent, int)。 这将通过系统设置发出启用可检测到模式的请求(无需停止您的应用)。 默认情况下,设备将变为可检测到并持续 120 秒钟。 您可以通过添加EXTRA_DISCOVERABLE_DURATION Intent Extra 来定义不同的持续时间。 应用可以设置的最大持续时间为 3600 秒,值为 0 则表示设备始终可检测到。 任何小于 0 或大于 3600 的值都会自动设为 120 秒。 例如,以下片段会将持续时间设为 300 秒:

Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);


相关文章
|
6月前
|
JavaScript Java Android开发
uniapp通过蓝牙传输数据 (安卓)
uniapp通过蓝牙传输数据 (安卓)
318 1
|
6月前
|
XML 物联网 API
Android Ble蓝牙App(五)数据操作
Android Ble蓝牙App(五)数据操作
659 0
|
6月前
|
Android开发
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
1283 0
|
3月前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
155 1
|
6月前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
539 5
|
6月前
|
定位技术 Android开发
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
242 1
|
6月前
|
Android开发
Android监听蓝牙广播
Android监听蓝牙广播
63 1
|
6月前
|
XML 物联网 API
Android Ble蓝牙App(二)连接与发现服务
Android Ble蓝牙App(二)连接与发现服务
210 1
|
6月前
|
物联网 Android开发
Android Ble蓝牙App(七)扫描过滤
Android Ble蓝牙App(七)扫描过滤
187 0
|
6月前
|
物联网 Android开发
Android Ble蓝牙App(六)请求MTU与显示设备信息
Android Ble蓝牙App(六)请求MTU与显示设备信息
356 0
下一篇
无影云桌面