Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin版

本文详细介绍了如何在Android应用中使用Kotlin进行蓝牙设备的扫描、绑定和解绑操作。首先讲解了如何修改状态栏样式,接着实现了蓝牙设备列表的适配器,包括设备类型的图标显示和状态判断。然后,文章阐述了权限请求的处理,初始化蓝牙的步骤,以及如何扫描和显示周围蓝牙设备。此外,还涉及到了广播接收器的创建和设备信息的显示。最后,文章提到了广播接收器在接收到蓝牙设备状态变化时的处理,以及如何处理用户的配对和取消配对操作。附带了部分关键代码片段,帮助读者理解实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<View

android:background=“#EBEBEB”

android:layout_marginLeft=“54dp”

android:layout_width=“match_parent”

android:layout_height=“1dp”/>

③ 编码


一切准备工作都已经就绪了,下面就进入编码环节,前面的内容其实和Kotlin的关系都不大,下面上正菜,Kotlin相比于Java来说的优势就是简洁,这一点会在下面的编码过程中体现。

1. 通知栏样式修改

首先修改状态栏的文字颜色,如果你现在运行这个项目在手机上时,你会发现状态栏是白色的背景以及白色的文字。如下图所示:

在这里插入图片描述

这样的用户体验是很不好的,而在Android6.0以后支持设置高亮状态栏样式。在之前我写Java版的时候特别弄了一个工具类,里面有针对性状态栏的一些样式和颜色改动,但实际上我只用了其中的一个方法,为了一个方法而去写一个工具类显然多此一举了。所以在Kotlin中我想到了更简单的办法,直接在MainActivity中修改状态栏样式。

代码如下:

//设置亮色状态栏模式 systemUiVisibility在Android11中弃用了,可以尝试一下。

window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or

View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

放在onCreate方法中,然后运行。

在这里插入图片描述

是不是立竿见影,这个效果一行代码解决问题还不用写工具类,完全调用系统的方法,请注意我是Android10.0版本的手机,也是我自己用的手机。

下面写列表的适配器,因为你扫描蓝牙肯定会是一个列表,既然是一个列表那么肯定要有适配器。

2. 蓝牙设备列表适配器编写

创建一个adapter包,包下创建一个DeviceAdapter.kt文件,如下所示

在这里插入图片描述

DeviceAdapter的代码如下:

package com.llw.bluetooth.adapter

import android.bluetooth.BluetoothClass

import android.bluetooth.BluetoothClass.Device.*

import android.bluetooth.BluetoothClass.Device.Major.*

import android.bluetooth.BluetoothDevice

import android.widget.ImageView

import android.widget.TextView

import com.chad.library.adapter.base.BaseQuickAdapter

import com.chad.library.adapter.base.BaseViewHolder

import com.llw.bluetooth.R

/**

  • 蓝牙设备适配器

*/

class DeviceAdapter(layoutResId: Int, data: MutableList?) :

BaseQuickAdapter<BluetoothDevice, BaseViewHolder>(layoutResId, data) {

override fun convert(helper: BaseViewHolder?, item: BluetoothDevice?) {

val tvName = helper!!.getView(R.id.tv_name)

val icon = helper.getView(R.id.iv_device_type)

//根据设备类型设置图标

getDeviceType(item!!.bluetoothClass.majorDeviceClass, icon)

tvName.text = if (item.name == null) “无名” else item.name

//蓝牙设备绑定状态判断

val tvState = helper!!.getView(R.id.tv_bond_state)

tvState.text = when (item.bondState) {

10 -> “未配对”

11 -> “正在配对…”

12 -> “已配对”

else -> “未配对”

}

//添加item点击事件

helper.addOnClickListener(R.id.item_device)

}

/**

  • 根据类型设置图标

  • @param type 类型码

  • @param icon 图标

*/

private fun getDeviceType(type: Int, icon: ImageView) {

when (type) {

AUDIO_VIDEO_HEADPHONES,//耳机

AUDIO_VIDEO_WEARABLE_HEADSET,//穿戴式耳机

AUDIO_VIDEO_HANDSFREE,//蓝牙耳机

AUDIO_VIDEO //音频设备

-> icon.setImageResource(R.mipmap.icon_headset)

COMPUTER //电脑

-> icon.setImageResource(R.mipmap.icon_computer)

PHONE //手机

-> icon.setImageResource(R.mipmap.icon_phone)

HEALTH //健康类设备

-> icon.setImageResource(R.mipmap.icon_health)

AUDIO_VIDEO_CAMCORDER, //照相机录像机

AUDIO_VIDEO_VCR //录像机

-> icon.setImageResource(R.mipmap.icon_vcr)

AUDIO_VIDEO_CAR_AUDIO //车载设备

-> icon.setImageResource(R.mipmap.icon_car)

AUDIO_VIDEO_LOUDSPEAKER //扬声器

-> icon.setImageResource(R.mipmap.icon_loudspeaker)

AUDIO_VIDEO_MICROPHONE //麦克风

-> icon.setImageResource(R.mipmap.icon_microphone)

AUDIO_VIDEO_PORTABLE_AUDIO //打印机

-> icon.setImageResource(R.mipmap.icon_printer)

AUDIO_VIDEO_SET_TOP_BOX //音频视频机顶盒

-> icon.setImageResource(R.mipmap.icon_top_box)

AUDIO_VIDEO_VIDEO_CONFERENCING //音频视频视频会议

-> icon.setImageResource(R.mipmap.icon_meeting)

AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER //显示器和扬声器

-> icon.setI

Kotlin可以用于蓝牙设备的配对。首先,你需要确保设备支持蓝牙功能并且蓝牙已经打开。然后,你可以使用以下步骤来配对蓝牙设备: 1. 初始化蓝牙适配器,检查设备是否支持蓝牙功能,并获取蓝牙适配器的实例。可以使用`BluetoothAdapter.getDefaultAdapter()`方法来获取蓝牙适配器的实例。 2. 检查蓝牙是否已经打开。可以使用`BluetoothAdapter.isEnabled`属性来检查蓝牙的状态。 3. 如果蓝牙已经打开,可以开始扫描周围的蓝牙设备。使用`BluetoothAdapter.startDiscovery()`方法来启动扫描过程。当扫描蓝牙设备时,可以通过广播接收器来接收扫描结果。 4. 在广播接收器中,你可以处理扫描到的蓝牙设备信息。你可以将这些信息保存到列表中,并且根据需要更新UI。 以上是配对蓝牙设备的基本步骤。你可以根据你的需求进行更多的操作,比如连接蓝牙设备、发送数据等。你可以参考引用引用中的代码示例引用中的文章来进一步了实践Kotlin蓝牙配对的过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Kotlin+Android 蓝牙基本操作](https://download.csdn.net/download/jaz/20936643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Android 蓝牙开发扫描设备绑定Kotlin](https://blog.csdn.net/qq_38436214/article/details/109725963)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值