Android 蓝牙连接,蓝牙配对,自动连接蓝牙
趁热打铁,这篇文章写于刚写完蓝牙配对Demo,主要介绍配对蓝牙的具体编码步骤,开整!
首先上效果图,看一下是否符合读者现在的需求
主要核心代码没有想象中那么复杂,首先要去申请一下权限,不仅需要蓝牙权限,还需要位置权限哦
- 清单文件中
<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- 代码中动态获取,这里主要获取位置权限,目前蓝牙权限不需要动态申请,如果某年之后需要动态申请与位置权限相似添加上即可
/*动态申请权限操作*/private boolean isPermissionRequested = false;public void requestPermission() {if (Build.VERSION.SDK_INT >= 23 && !isPermissionRequested) {isPermissionRequested = true;ArrayList<String> permissionsList = new ArrayList<>();String[] permissions = {//在这里加入你要使用的权限Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION};for (String perm : permissions) {if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(perm)) {permissionsList.add(perm);// 进入这里代表没有权限.}}if (!permissionsList.isEmpty()) {String[] strings = new String[permissionsList.size()];requestPermissions(permissionsList.toArray(strings), 0);}}}
权限就如入场券,有了权限才能大胆进行其他操作
蓝牙操作的主要核心都是围绕蓝牙设备适配器 BluetoothAdapter 来进行的,想要获取到蓝牙设备适配器,首先要先创建蓝牙设备管理器 BluetoothManager
BluetoothManager bluetoothmanger = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);BluetoothAdapter bluetoothadapter = bluetoothmanger.getAdapter();
拿到蓝牙设备适配器你就可以 “为所欲为” 了,具体怎么个任性法呢,通过这个适配器你可以判断当前设备是否支持蓝牙,可以判断当前设备蓝牙是否开启,可以开启关闭蓝牙,可以进行蓝牙搜索与取消搜索,等等…
具体表现在:
bluetoothadapter == null 当前设备不支持蓝牙,反之
bluetoothadapter.getName() 本机蓝牙名称
bluetoothadapter.getAddress() 本机蓝牙地址
bluetoothadapter.getBondedDevices() 获取当前设备蓝牙已经连接的设备信息
bluetoothadapter.isEnabled() 蓝牙是否开启
bluetoothadapter.enable() 开启蓝牙
bluetoothadapter.disable() 关闭蓝牙
bluetoothadapter.isDiscovering() 当前蓝牙是否正在进行搜索
bluetoothadapter.startDiscovery() 开启搜索附近蓝牙设备
bluetoothadapter.cancelDiscovery() 关闭搜索附近蓝牙设备
其实上面的几个方法就能完成前面的效果图功能了,当然还有当前设备已连接的数据和附近设备的数据呢,别急,他来了!
首先上述方法中的 bluetoothadapter.getBondedDevices() 方法为获取当前设备,他返回的是一个 Set 集合,其中的参数类型为 BluetoothDevice 字面意思为 蓝牙设备,这就已经明示了,这个集合装的是 一条条的设备信息,既然是设备信息,怎么获取到当前设备的名字和地址呢?
是的,就是这么直接, getName() 和 getAddress() 方法就能获取相应信息
以上是获取当前设备已连接信息,那怎么获取附近设备信息呢?
首先考虑的一点就是,要想设备与其他设备进行交流该用什么方式呢,你直接在代码里写方法,肯定是与其他设备联系不到的,这里就用到了广播,通过广播的形式去找各个设备的蓝牙信息,如果找到了就把他的蓝牙信息返回过来,我们拿到了蓝牙信息中的地址就能去相应的蓝牙设备进行交流,完结,撒花!
/***注释:* 广播,寻找其他蓝牙设备*/private BroadcastReceiver searchDevices = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(BluetoothDevice.ACTION_FOUND)) { //found deviceBluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if (device.getName() != null){//没有名称时不添加String str = "名称: "+device.getName() + " 地址:" + device.getAddress();System.out.println("BlueTooth搜索到的设备:"+str);//如果List中没有str元素则返回-1if (myEveryList.indexOf(str) == -1){// 防止重复添加myEveryList.add(device); // 获取设备名称和mac地址}}} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) {Toast.makeText(getBaseContext(), "正在扫描,请耐心等待", Toast.LENGTH_SHORT).show();tv_now_search.setVisibility(View.VISIBLE);//显示等待标识lv_every.setVisibility(View.GONE);//列表先隐藏掉tv_fu.setText("附近的蓝牙设备("+myEveryList.size()+")");} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {tv_now_search.setVisibility(View.GONE);//隐藏等待标识lv_every.setVisibility(View.VISIBLE);//列表显示Toast.makeText(getBaseContext(), "扫描完成,点击列表中的设备来尝试连接", Toast.LENGTH_SHORT).show();tv_fu.setText("附近的蓝牙设备("+myEveryList.size()+")");lv_every.setAdapter(new MyFuListAdapter(myEveryList));}}};
以上就是蓝牙配对的编码过程,下面介绍一下如何进行蓝牙配对与取消配对,以上操作的基础都是你要有对应蓝牙设备信息,就是上述的BluetoothDevice
蓝牙配对:
Method method = BluetoothDevice.class.getMethod("createBond");method.invoke(myEveryList.get(i));//这里面的参数就是BluetoothDevice
取消配对
Method method = BluetoothDevice.class.getMethod("removeBond");method.invoke(myNowList.get(i));//这里面的参数就是BluetoothDevice
好了,将上述文章的相关方法拼凑起来就构成了从 开启关闭蓝牙、搜索蓝牙设备、进行设备连接、进行取消连接的一条龙操作。
源码也发布到资源里面去了, 1 C币下载! 壹 C币下载! 下载地址
Android 蓝牙连接,蓝牙配对,自动连接蓝牙相关推荐
- 20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示
20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示 2022/7/27 18:55 Android11:摩托罗拉 motorola edge s 6GB+128GB 骁龙870 ...
- 打开计算机网络自动连接,电脑网络自动连接如何设置
电脑网络自动连接如何设置?宽带连接在基本电子和电子通讯是描述续号或者是电子线路包含或者是能够同时处理较宽的频率范围,它是一种相对的描述方式,频率的范围愈大,也就是频宽愈高时,传送资料相对增加.下面就由 ...
- PHP宽带自动拨号,window_Win10怎么设置宽带自动连接 win10开机自动连接宽带设置方法详解,对于没有使用路由器中转,每 - phpStudy...
Win10怎么设置宽带自动连接 win10开机自动连接宽带设置方法详解 对于没有使用路由器中转,每次开机都需要进行宽带连接拨号上网的用户来说,每次打开电脑都需要打开宽带连接进行拨号才能正常上网是不是很 ...
- 树莓派---设置WIFI自动连接或者取消自动连接
树莓派---设置WIFI自动连接或者取消自动连接 注意 一.方案 二.设置WIFI自动连接 2.1 远程连接 (若树莓派本地操作则跳过) 2.2 修改WIFI自动连接配置文件 三.取消WI ...
- 传统蓝牙配对连接,为何有些蓝牙模块只配对没连接上?
最近调试需求,针对性对某个无屏幕的设备编写了个蓝牙日志传输应用,也很简单,即使把log和log文件通过蓝牙传输到另一台设备查看,不多说,讲下蓝牙配对连接.直接上代码 public class BleL ...
- 蓝牙BLE的连接过程,自动连接过程
BLE连接,再次连接 BLE的第一次连接 1 蓝牙连接过程中的角色 2 连接过程中两个角色对应的状态 ble蓝牙的连接过程 二. 再次自动连接 1 二次连接的特点: BLE的第一次连接 所谓连接,分为 ...
- 蓝牙(二)蓝牙搜索、配对、连接
1.搜索 从上一节我们可以知道,蓝牙状态发生了改变,并发生了回调.咱们就从回调开始. DevicePickerFragment.java 用于蓝牙设置界面的蓝牙配置和管理 @Overridepubli ...
- android 连接已配对蓝牙耳机,连接/配对蓝牙耳机和Android
我想创建一个简单的程序,扫描蓝牙耳机(我正在测试一个PS3耳机),然后连接到它.我正在使用bluetooth chat program example中的代码.但是我无法将它连接到任何东西.当它到达c ...
- Android 根据账号和密码自动连接 WIFI (兼容Android 10)
源码地址在这里在这里!!!!!master分支哈 文章目录 1 遇到困难 2 源代码 2.1 IWifiConnectListener.java 2.2 IWifiDisConnectListener ...
- HTML手机自动连接问题,airpods自动连接不上怎么办_airpods打开后不自动连接的解决方法...
airpods自动连接不上是什么原因,可能很多人是不了解的,虽然说airpods是一款很好的无线耳机,但是它在使用实际中还是存在一些小问题的.比如airpods打开充电盒后,耳机不能与设备进行自动连接 ...
最新文章
- [JS] 闭包与内存泄漏
- laravel ajax vue6,详解用vue.js和laravel实现微信支付
- OpenStack环境搭建(五:附加项虚拟机文件备份使用)
- 谷歌大脑最新研究:用AutoML的方式自动学习Dropout模式,再也不用手动设计
- springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置
- 计算机双系统,自己在计算机上安装双系统
- Linux中的权限管理命令-chmod
- datetime 比较_MySQL时间类型datetime,timestamp,int如何选择,很多程序员收藏了
- iOS底层探索之Block(五)——Block源码分析(__block 底层都做了什么?)
- 图像/视频超分之降质过程
- 【C语言】在终端输入多行信息,找出包含“ould”的行,并打印改行。
- 《Java高级Struts2》教学大纲(云计算) 版本号	编写人	版本描述 V1.0		 目录 课程教学目标	5 (一)知识目标	5 (二)能力目标	6 (三)速度目标	6
- 阿里 计算机底层架构原理 pdf,完美起航-震撼!8位阿里大牛编写的2500页计算机底层架构原理解析,香香香...
- 全15期BIM等级考试解析(内附考试秘籍)
- echarts label固定位置_echarts 饼状图调节 label和labelLine的位置
- 基于词频的文件相似度
- NL2SQL深度学习方法总结
- 笹山希 java,C#版数据结构与算法高级教程(深入探讨)--附各种算法实例-升级版
- 【文献阅读】Commission Fee is not Enough: A Hierarchical Reinforced Framework for Portfolio Management
- OmniPlan 项目管理入门
热门文章
- BEV蒸馏来了!BEVDistill:用于多目3D目标检测的跨模态BEV蒸馏
- oracle9i rac for aix,oracle 11gR2 rac for aix 第二个节点运行root.sh不成功问题处理
- 图搜索算法(一):图搜索的一般算法
- 如何用批处理文件删除某个文件
- matlab 两个txt文件的合并。。
- Studio 3T的使用
- 洛谷p1598题解记录
- 抖音+今日头条副业项目,新玩法,后期收益月入过万
- 多生成树协议,冗余备份,负载均衡
- Windows下桌面便签小工具--StickyPad简单使用教程(非StickyNotes)