我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

最近换了一家公司,主要内容是做关于移动端室内定位的相关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());
            }
        }
    }

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

win10查找蓝牙设备的方法

本文小编为大家详细介绍“win10查找蓝牙设备的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10查找蓝牙设备的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.在蓝牙型号与电脑匹配时,按【Win
2023-07-02

Android应用获取设备序列号的方法

软硬件环境 Macbook Pro MGX 72 Android studio 2.1.2 Android 5.1.1前言上一篇介绍了如何获取ethernet的MAC地址,对于厂商来讲,除了MAC号,还有一项数据也很重要,那就是机器序
2023-05-31

Win8系统蓝牙设备怎么删除?Win8系统删除蓝牙设备的方法

Win8系统蓝牙设备怎么删除?如果我们不需要使用电脑的蓝牙功能,并想删除蓝牙设备的话,需要怎么操作呢?下面小编就给大家带来Win8系统删除蓝牙设备的方法,一起来看看吧!方法/步骤:1、我的电脑右键选择“管理”。2、选
2022-06-04

Android 获取 应用列表 方法记录

前言 有时,我们需要获取设备上的 应用列表, 例如获取 所有已安装的 或者 能够显示在 桌面上的APK. 基于这些列表,我们可以做一些管理功能, 例如权限展示等的. 1. 获取所有已安装的应用 简单起见, 仅返回每个应用的包名 //
2023-08-17

无法连接win10蓝牙设备的解决方案

我们可以利用蓝牙设备,在无网络环境下传输文件或连接蓝牙耳机欣赏音乐等。但最近,一些网民说,他们的win10计算机蓝牙不能连接怎么了?下面的小边将教你如何连接win10蓝牙设备。这种情况可能是由驱动问题引起的。以下小系列将向您展示具体的解决方
2023-07-10

windows无法获取设备列表怎么解决

如果Windows无法获取设备列表,可以尝试以下解决方法:1. 重新启动计算机:有时候设备列表的问题可以通过简单地重新启动计算机来解决。2. 更新驱动程序:设备列表问题可能是由于过期或损坏的驱动程序引起的。可以尝试更新相关设备的驱动程序,方
2023-10-18

iOS蓝牙设备名称缓存问题的解决方法

1. 问题背景当设备已经在 App 中连接成功后修改设备名称App 扫描到的设备名称仍然是之前的名称App 代码中获取名称的方式为(perpheral.name)2. 问题分析当 APP 为中心连接其他的蓝牙设备时。 首次连接成功过后,iO
2022-05-22

Android编程获取设备MAC地址的实现方法

本文实例讲述了Android编程获取设备MAC地址的实现方法。分享给大家供大家参考,具体如下:/** * 获取设备的mac地址 * * @param ac * @param callback * 成功获取到mac地址之后会回调此方
2022-06-06

Android 7.0开发获取存储设备信息的方法

本文实例讲述了 Android 7.0开发获取存储设备信息的方法。分享给大家供大家参考,具体如下:Android 7.0开发相较之前有不少改进,具体可参考前面的文章Android7.0版本影响开发的改进分析,这里简单总结一下Android
2023-05-30

Android获取手机文件夹及文件列表的方法

先看看效果图:package wuwang.tools.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx
2022-06-06

小程序开发中如何获取蓝牙设备某个服务中的所有characteristic

这篇文章主要为大家展示了小程序开发中如何获取蓝牙设备某个服务中的所有characteristic,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“小程序开发中如何获取蓝牙设备某个服务中的所有chara
2023-06-26

Android 获取设备屏幕大小的几种方法总结

1、通过WindowManager获取DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);System
2023-05-31

wordpress获取置顶文章列表的方法

首先,你需要了解query_posts函数。该函数的作用就是对文章进行检索、挑选、排序,在其后的LOOP循环中使用经过挑选、排序的文章。例如: 复制代码代码如下:
2022-06-12

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录