广告
返回顶部
首页 > 资讯 > 移动开发 >Android获取蓝牙设备列表的方法
  • 969
分享到

Android获取蓝牙设备列表的方法

2024-04-02 19:04:59 969人浏览 安东尼
摘要

最近换了一家公司,主要内容是做关于移动端室内定位的相关sdk,刚进来的时候信心满满,誓要干出一番天地!!!结果进来快一个多月了,根本没轮到我施展拳脚,给我搁置在一旁自己弄自己的。行吧

最近换了一家公司,主要内容是做关于移动端室内定位的相关sdk,刚进来的时候信心满满,誓要干出一番天地!!!结果进来快一个多月了,根本没轮到我施展拳脚,给我搁置在一旁自己弄自己的。行吧,既然是做室内定位的话那无非就是(gps,蓝牙,wifi等)这些技术来实现嘛,然后我们就可以有本篇的切入点了:

android如何获取蓝牙设备了?

我们一步一步来分析,首先蓝牙属于一种短距离的无线通信技术,那作为我们Android系统是否对此有过封装了?答案那肯定是有了!

BluetoothAdapter

android提供的蓝牙适配器,既然有了适配器,接下来我们获取蓝牙列表就有了一个切口。首先我们获取蓝牙列表之前,先需要获取蓝牙相关的权限,我们在AndroidManifest.xml里加入权限以下权限:


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

接下来我们在检查设备是否有蓝牙功能


bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
   //通知用户当前设备不具有蓝牙功能
            return;
        }

如果bluetoothAdapter != null, 我们再来检查用户是否开启了蓝牙功能


if (!bluetoothAdapter.isEnabled()){ //检查是否开启蓝牙功能
     Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
     startActivity(intent); //跳转到系统Activity,让用户选择开启蓝牙功能
     bluetoothAdapter.enable();
     return;
}

通过BluetoothAdapter源码我们可以看到该类下面定义了很多常量值


public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED";
    public static final String ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED";
    public static final String ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED";
    public static final String ACTION_LOCAL_NAME_CHANGED = "android.bluetooth.adapter.action.LOCAL_NAME_CHANGED";
    public static final String ACTION_REQUEST_DISCOVERABLE = "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE";
    public static final String ACTION_REQUEST_ENABLE = "android.bluetooth.adapter.action.REQUEST_ENABLE";
    public static final String ACTION_SCAN_MODE_CHANGED = "android.bluetooth.adapter.action.SCAN_MODE_CHANGED";

不难看出这些应该是适配器给我们配置的广播标签,那我们就根据这些状态值来创建一个

BroadcastReceiver.class用来接收蓝牙适配器给我们发送的消息


public class BlueToothBroadcast extends BroadcastReceiver {
 
    private List<String> blueToothList;
    private BlueToothListAdapter blueToothListAdapter;
    private List<String> stringList = new ArrayList<>;
 
    public BlueToothBroadcast(List<String> blueToothList,
BlueToothListAdapter blueToothListAdapter) {
        this.blueToothList = blueToothList;
        this.blueToothListAdapter= blueToothListAdapter;
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
         switch (action){
            case BluetoothDevice.ACTION_FOUND:
                //收集蓝牙信息
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                String Mac = (device.getAddress().replace(":", ""));
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append("设备名称:" + device.getName() + "\n");
                stringBuilder.append("mac地址:" + toLowerCase(mac, 0, mac.length()) + "\n");
                //用一个新的string集合去对比设备名称和mac地址,不能拼接rssi和uuid后再去对比
                if (stringList.indexOf(stringBuilder.toString()) == -1) {
                    // 防止重复添加
                    stringList.add(stringBuilder.toString());
                    if (device.getName() != null) {
                        stringBuilder.append("rssi:" + intent.getExtras().getShort(BluetoothDevice.EXTRA_RSSI) + "\n");
                        stringBuilder.append("Uuid:" + device.getUuids());
                        blueToothList.add(stringBuilder.toString()); // 获取设备名称和mac地址
                    }
                }
                Log.d("searchDevices", "onReceive str: " + blueToothList.toString());
                break;
            case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
                //正在扫描
                break;
            case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
                blueToothListAdapter.notifyDataSetChanged();
                Toast.makeText(context, "扫描完成", Toast.LENGTH_SHORT).show();
                break;
        }
    }
 
 
    //格式化mac地址
    public static String toLowerCase(String str, int beginIndex, int endIndex) {
        return str.replaceFirst(str.substring(beginIndex, endIndex),
                str.substring(beginIndex, endIndex)
                        .toLowerCase(Locale.getDefault()));
    }
}

接下来在activity中去注册我们的广播(记得在ondestroy中注销广播啊)


// 注册Receiver来获取蓝牙设备相关的结果
 broadcastReceiver = new BlueToothBroadcast(blueToothList,blueToothListAdapterr);
 IntentFilter intent = new IntentFilter();
        intent.addAction(BluetoothDevice.ACTION_FOUND); // 用BroadcastReceiver来取得搜索结果
        intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        reGISterReceiver(broadcastReceiver, intent);

最后一步,开启蓝牙发送广播,然后在自己写的适配器上把收集到的list加载上去,完事儿!

这套下来我们的蓝牙设备列表就获取完成了!快去试试


if (!bluetoothAdapter.isDiscovering()) {
            blueToothList.clear();
            addPairedDevice();//添加蓝牙配对设备
            bluetoothAdapter.startDiscovery();
 }
 
  private void addPairedDevice() {
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if (pairedDevices != null && pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                String mac = (device.getAddress().replace(":", ""));
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append(getString(R.string.device_name)).append(device.getName()).append("\n");
                stringBuilder.append(getString(R.string.mac_ip)).append(toLowerCase(mac, 0, mac.length())).append("\n");
                stringBuilder.append(getString(R.string.uuid)).append(Arrays.toString(device.getUuids()));
                blueToothList.add(stringBuilder.toString());
            }
        }
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android获取蓝牙设备列表的方法

本文链接: https://www.lsjlt.com/news/154809.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android获取蓝牙设备列表的方法
    最近换了一家公司,主要内容是做关于移动端室内定位的相关sdk,刚进来的时候信心满满,誓要干出一番天地!!!结果进来快一个多月了,根本没轮到我施展拳脚,给我搁置在一旁自己弄自己的。行吧...
    99+
    2022-11-12
  • 获取Android设备序列号的方法
    获取Android设备序列号的方法 在Android应用开发中,有时我们需要获取设备的唯一标识,例如设备序列号。设备序列号是一个字符串,可以用于标识特定的Android设备。本文将介绍如何在Andro...
    99+
    2023-10-11
    android Android
  • Android设备蓝牙连接扫描枪获取扫描内容
    条形扫描枪主要可以扫描条形码和二维码等,扫描速度比手机扫描设备快得多,本文简单介绍android 通过蓝牙监听蓝牙连接,当扫描设备连接完成后,扫描设备相当于外接键盘,通过监听外接键盘...
    99+
    2022-11-12
  • Android应用获取设备序列号的方法
    软硬件环境 Macbook Pro MGX 72 Android studio 2.1.2 Android 5.1.1前言上一篇介绍了如何获取ethernet的MAC地址,对于厂商来讲,除了MAC号,还有一项数据也很重要,那就是机器序...
    99+
    2023-05-31
    android 设备 序列号
  • Android获取wifi列表的方法
    本文实例为大家分享了Android获取wifi列表的具体代码,供大家参考,具体内容如下 接着上篇的获取蓝牙列表,这次我们来获取android设备的wifi列表,话不多少直接上代码! ...
    99+
    2022-11-12
  • win10查找蓝牙设备的方法
    本文小编为大家详细介绍“win10查找蓝牙设备的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10查找蓝牙设备的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在蓝牙型号与电脑匹配时,按【Windo...
    99+
    2023-07-02
  • Win8系统蓝牙设备怎么删除?Win8系统删除蓝牙设备的方法
      Win8系统蓝牙设备怎么删除?如果我们不需要使用电脑的蓝牙功能,并想删除蓝牙设备的话,需要怎么操作呢?下面小编就给大家带来Win8系统删除蓝牙设备的方法,一起来看看吧!   方法/步骤:   1、我的电...
    99+
    2022-06-04
    蓝牙 设备 系统
  • Android获取设备传感器的方法
    本文实例为大家分享了Android获取设备传感器的具体代码,供大家参考,具体内容如下 结果示例: xml代码: <xml version="1.0" encoding="ut...
    99+
    2022-11-13
  • Android 获取 应用列表 方法记录
    前言 有时,我们需要获取设备上的 应用列表, 例如获取 所有已安装的 或者 能够显示在 桌面上的APK. 基于这些列表,我们可以做一些管理功能, 例如权限展示等的. 1. 获取所有已安装的应用 简单起见, 仅返回每个应用的包名 //...
    99+
    2023-08-17
    android java android studio
  • windows无法获取设备列表怎么解决
    如果Windows无法获取设备列表,可以尝试以下解决方法:1. 重新启动计算机:有时候设备列表的问题可以通过简单地重新启动计算机来解...
    99+
    2023-10-18
    windows
  • 无法连接win10蓝牙设备的解决方案
    我们可以利用蓝牙设备,在无网络环境下传输文件或连接蓝牙耳机欣赏音乐等。但最近,一些网民说,他们的win10计算机蓝牙不能连接怎么了?下面的小边将教你如何连接win10蓝牙设备。这种情况可能是由驱动问题引起的。以下小系列将向您展示具体的解决方...
    99+
    2023-07-10
  • Android设备序列号:如何获取和查找您的Android设备的序列号
    Android设备序列号:如何获取和查找您的Android设备的序列号 在使用Android设备时,有时候需要查找设备的序列号来进行诊断、维修或者进行其他操作。本文将介绍如何获取和查找Android设...
    99+
    2023-10-01
    android Android
  • adb获取手机设备蓝牙&热点&wifi状态并操作的笔记
    adb获取手机设备蓝牙&热点&wifi状态并操作的笔记 在Windows上查找字符串使用的是findstr,在linux上使用的是grep 1 #获取状态 2 3 $ adb shell ps | ...
    99+
    2023-09-21
    adb android
  • iOS蓝牙设备名称缓存问题的解决方法
    1. 问题背景 当设备已经在 App 中连接成功后 修改设备名称 App 扫描到的设备名称仍然是之前的名称 App 代码中获取名称的方式为(perpheral.na...
    99+
    2022-05-22
    ios 蓝牙 缓存
  • Android获取手机文件夹及文件列表的方法
    先看看效果图: package wuwang.tools.utils; import java.io.File; import java.io.FileInputS...
    99+
    2022-06-06
    列表 方法 手机 Android
  • Android编程获取设备MAC地址的实现方法
    本文实例讲述了Android编程获取设备MAC地址的实现方法。分享给大家供大家参考,具体如下: public static void getMacAddress(final...
    99+
    2022-06-06
    方法 mac Android
  • Android 7.0开发获取存储设备信息的方法
    本文实例讲述了 Android 7.0开发获取存储设备信息的方法。分享给大家供大家参考,具体如下:Android 7.0开发相较之前有不少改进,具体可参考前面的文章Android7.0版本影响开发的改进分析,这里简单总结一下Android ...
    99+
    2023-05-30
    android7.0 存储设备 roi
  • 小程序开发中如何获取蓝牙设备某个服务中的所有characteristic
    这篇文章主要为大家展示了小程序开发中如何获取蓝牙设备某个服务中的所有characteristic,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“小程序开发中如何获取蓝牙设备某个服务中的所有chara...
    99+
    2023-06-26
  • Android 获取设备屏幕大小的几种方法总结
    1、通过WindowManager获取DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);System...
    99+
    2023-05-31
    android 获取屏幕 roi
  • wordpress获取置顶文章列表的方法
    首先,你需要了解query_posts函数。该函数的作用就是对文章进行检索、挑选、排序,在其后的LOOP循环中使用经过挑选、排序的文章。例如: 复制代码代码如下:<phpquery_posts('posts_per...
    99+
    2022-06-12
    wordpress 文章列表
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作