Android 蓝牙开发基本流程

Android 蓝牙开发基本流程此例子基于 androiddemo 对于一般的软件开发人员来说 蓝牙是很少用到的 尤其是 Android 的蓝牙开发 国内的例子很少 Android 对于蓝牙开发从 2 0 版本的 sdk 才开始支持 而且模拟器不支持 测试至少需要两部手机 所以制约了很多技术人员的开发 鉴于很多开发人员现在也有蓝牙开发的需求 也为了大家少走些弯路 先将我积攒的一点点在 Android 蓝牙开发经验与大家

此例子基于 android demo

 

   首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限

 

 

注:Android 6.0后需要加上

 
  

这个权限

然后,看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下,如下图,只有8个类

                
而我们需要用到了就只有几个而已:

    1.BluetoothAdapter 

顾名思义,蓝牙适配器,直到我们建立bluetoothSocket连接之前,都要不断操作它BluetoothAdapter里的方法很多,常用的有以下几个:

      cancelDiscovery() 根据字面意思,是取消发现,也就是说当我们正在搜索设备的时候调用这个方法将不再继续搜索

      disable()关闭蓝牙

      enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户

Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enabler,reCode);//同startActivity(enabler);

      getAddress()获取本地蓝牙地址

      getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter

      getName()获取本地蓝牙名称

      getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备

      getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)

      isDiscovering()判断当前是否正在查找设备,是返回true

      isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false

     listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步

      startDiscovery()开始搜索,这是搜索的第一步

2.BluetoothDevice

看名字就知道,这个类描述了一个蓝牙设备

      createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket

getState() 蓝牙状态这里要说一下,只有在 BluetoothAdapter.STATE_ON 状态下才可以监听,具体可以看andrid api;

    3.BluetoothServerSocket

如果去除了Bluetooth相信大家一定再熟悉不过了,既然是Socket,方法就应该都差不多,这个类一种只有三个方法两个重载的accept(),accept(inttimeout)两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!

      close()这个就不用说了吧,翻译一下——关闭!

 4.BluetoothSocket

 跟BluetoothServerSocket相对,是客户端一共5个方法,不出意外,都会用到

      close(),关闭

      connect()连接

      getInptuStream()获取输入流

      getOutputStream()获取输出流

      getRemoteDevice()获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备

 

 

1、获取本地蓝牙适配器

 2、打开蓝牙

      if(!mAdapter.isEnabled()){

//弹出对话框提示用户是后打开

Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enabler, REQUEST_ENABLE);

      //不做提示,强行打开

      // mAdapter.enable();

}

是第一步,可以你会发现没有返回的蓝牙设备,怎么知道查找到了呢?向下看,不要急

2)定义BroadcastReceiver,关于BroadcastReceiver不多讲了,不是今天的讨论内容,代码如下

 

 BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //找到设备 if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (device.getBondState() != BluetoothDevice.BOND_BONDED) { Log.v(TAG, "find device:" + device.getName() + device.getAddress()); } } //搜索完成 else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED .equals(action)) { setTitle("搜索完成"); if (mNewDevicesAdapter.getCount() == 0) { Log.v(TAG, "find over"); } } } };

 这样,没当查找到新设备或是搜索完成,相应的操作都在上段代码的两个if里执行了,不过前提是你要先注册

 

BroadcastReceiver,具体代码如下

 

 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mReceiver, filter); filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver, filter);

 

1)服务器端:

        //http://www.uuidgenerator.com 申请

android.bluetooth下有8个类,还有4个类没有用到,那4个类里定义的都是常量,我也没用到它们..

 

  最后把我找到的几个蓝牙的例子附在后面,希望从事软件开发,尤其是Android开发的朋友以后多沟通、多分享!

补充一下,使设备能够被搜索

Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

startActivityForResult(enabler,REQUEST_DISCOVERABLE);

 

demo是包括客户端和服务端;分别放到两个手机上就可以通信;大家改改应该就可以用;

http://download.csdn.net/detail/q/
这个是官方的demo:
http://download.csdn.net/detail/q/




 

https://edu.csdn.net/course/detail/24723Android bluetooth 蓝牙通信 视频教程

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199140.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午1:45
下一篇 2026年3月26日 下午1:46


相关推荐

  • jsp延时跳转_js自动跳转到指定页面

    jsp延时跳转_js自动跳转到指定页面本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末js延时页面跳转<scripttype=”text/javascript”> functionsend(){ alert(“转账码制作成功!!!”); window.history.back();//返回上一页 } setTimeout(send,2000);//等待2秒后执行</script>本文仅供学习交流使用,如侵立删!企鹅、WX:1033383881…

    2022年8月13日
    7
  • Cursor Figma MCP 互联网最全安装指南

    Cursor Figma MCP 互联网最全安装指南

    2026年3月15日
    2
  • 到底学Python还是Java?一张图PK明白!

    到底学Python还是Java?一张图PK明白!点击上方“程序人生”,选择“置顶公众号”第一时间关注程序猿(媛)身边的故事Java和Python一直都是两种很火很强大的编程语言,对于刚开始起步学习编程的同学来说,会迷惑且最经常问的问题是,我该学Java还是Python,是不是Python容易学,或是应该先学什么编程语言等等这样的问题。作为一名Java程序员,肯定会建议你先学Java,然后再学Python,但如果你问一个

    2022年7月7日
    21
  • 1_项目搭建

    1_项目搭建数据库父工程1、建Module:supergo_parent2、改pom<?xmlversion=”1.0″encoding=”UTF-8″?><projectxmlns=”http://maven.apache.org/POM/4.0.0″xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation=”http://maven.apache.org/POM/4.

    2022年6月25日
    33
  • 语音信号处理习题

    语音信号处理习题二、问答题(每题5分,共20分)1、语音信号处理主要研究哪几方面的内容?语音信号处理是研究用数字信号处理技术对语言信号进行处理的一门学科,语音信号处理的理论和研究包括紧密结合的两个方面:一方面,从语言的产生和感知来对其进行研究,这一研究与语言、语言学、认知科学、心理、生理等学科密不可分;另一方面,是将语音作为一种信号来进行处理,包括传统的数字信号处理技术以及一些新的应用于语音信号的处理方法和技术。2、语音识别的研究目标和计算机自动语音识别的任务是什么?语音识别技术,也被称为自动语音

    2022年5月13日
    52
  • 用户认证–auth模块实现

    转载文章,如有不妥之处请谅解相关介绍authauth模块是Django提供的标准权限管理系统,可以提供用户身份认证,用户组和权限管理。auth可以和admin模块配合使用,快速建立网站的管

    2022年3月29日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号