Android中蓝牙的基本使用----BluetoothAdapter类简介



在Android系统中,蓝牙功能是通过蓝牙适配器(BluetoothAdapter)类来实现的,它提供了与设备上的蓝牙硬件交互的接口。本文将详细介绍BluetoothAdapter类及其在Android中蓝牙基本使用的方法。 理解BluetoothAdapter类的角色至关重要。它是Android Bluetooth API的核心组件,允许应用程序进行蓝牙扫描、连接、数据传输等操作。开发者可以通过`getSystemService()`方法获取到系统服务中的BluetoothAdapter实例,代码如下: ```java BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); ``` 如果设备不支持蓝牙或服务未初始化,`getDefaultAdapter()`会返回null。因此,在使用蓝牙功能前,需要检查蓝牙适配器是否存在: ```java if (bluetoothAdapter != null) { // 蓝牙可用 } else { // 蓝牙不可用 } ``` 接下来,开启和关闭蓝牙服务可以通过`enable()`和`disable()`方法: ```java // 开启蓝牙 if (!bluetoothAdapter.isEnabled()) { bluetoothAdapter.enable(); } // 关闭蓝牙 if (bluetoothAdapter.isEnabled()) { bluetoothAdapter.disable(); } ``` 蓝牙设备的扫描是通过`startDiscovery()`方法实现的,但注意此操作需要用户权限(`Manifest.permission.BLUETOOTH_ADMIN`和`Manifest.permission.BLUETOOTH`)。扫描结果可通过`BroadcastReceiver`监听`ACTION_DISCOVERY_STARTED`和`ACTION_DISCOVERY_FINISHED`广播,以及设备发现的`ACTION_FOUND`广播: ```java IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.d("TAG", "发现设备: " + device.getName()); } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) { Log.d("TAG", "扫描开始"); } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { Log.d("TAG", "扫描结束"); } } }; registerReceiver(receiver, filter); ``` 一旦找到目标设备,可以使用`createBond()`方法建立配对关系: ```java BluetoothDevice device = ...; // 获取到目标设备 device.createBond(); ``` 连接到已配对的蓝牙设备,可以创建一个`BluetoothSocket`,通常用于进行RFCOMM(串行端口协议)连接。以下代码展示了如何创建并连接到一个已知服务UUID的设备: ```java BluetoothDevice device = ...; // 已配对设备 BluetoothSocket socket = null; try { ParcelUuid[] uuids = device.getUuids(); for (ParcelUuid parcelUuid : uuids) { if (parcelUuid.equals(MY_UUID_IN_HEX)) { // 使用预定义的服务UUID Method createRfcommSocket = device.getClass().getMethod("createRfcommSocketToServiceRecord", UUID.class); socket = (BluetoothSocket) createRfcommSocket.invoke(device, MY_UUID_IN_HEX); break; } } } catch (Exception e) { e.printStackTrace(); } if (socket != null) { try { socket.connect(); // 连接设备 } catch (IOException e) { e.printStackTrace(); } } ``` 数据的读写通常在`BluetoothSocket`的输入流和输出流上进行。例如,使用`InputStream`读取数据,`OutputStream`写入数据: ```java InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); byte[] buffer = new byte[1024]; int bytes; while (true) { try { bytes = inputStream.read(buffer); // 读取数据 if (bytes > 0) { String readMessage = new String(buffer, 0, bytes); // 处理读取到的数据 } } catch (IOException e) { e.printStackTrace(); } } // 写入数据 outputStream.write("Hello, Bluetooth!".getBytes()); ``` 当完成蓝牙通信后,记得关闭输入流、输出流和`BluetoothSocket`,并解除配对: ```java inputStream.close(); outputStream.close(); socket.close(); device.removeBond(); ``` 以上就是Android中使用BluetoothAdapter进行蓝牙基本操作的详解,包括开启/关闭蓝牙、扫描设备、配对、连接和数据传输。在实际应用中,还需要考虑到蓝牙操作的异步处理、权限请求、异常处理以及用户界面的更新等问题。通过这些基础,开发者可以构建出丰富的蓝牙应用场景,如文件传输、设备控制等。











































































- 1

- 粉丝: 5289
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- ERP系统软件在供电企业物资管理中的运用.docx
- 军交运输信息化建设浅议.doc
- 职业学院计算机网络实验教学的改革策略.docx
- 浅析中等职业教育计算机教学创新.docx
- 专升本计算机补充基础知识.doc
- 互联网IT-PPT模板.ppt
- 2017年物联网技术应用模拟试题.docx
- 智能货运报价系统 - AI驱动的货物数据识别与智能报价平台
- 施工项目管理的注意问题.docx
- 基于PLC的五层五站电梯的方案设计书.doc
- 对大数据时代下高职计算机专业教育的几点探讨.docx
- BENET公司网络综合布.ppt
- HPE-BladeSystem解决方案及虚拟化方案包.pptx
- 创业帮手移动互联网的盈利模式和商业模式.doc
- 电气自动化工程节能技术分析.docx
- 信息工程项目管理能力建设.doc



- 1
- 2
- 3
- 4
- 5
- 6
前往页