前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据。

因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码。

---------------------------------------------------------------------------------------------------

一、蓝牙开发相关类

1、BluetoothAdapter

显而易见,蓝牙适配器。

通过这个类我们进行以下操作:

、开关蓝牙设备
、扫描蓝牙设备
、设置/获取蓝牙状态信息,例如:蓝牙状态值、蓝牙Name、蓝牙Mac地址等;

2、BluetoothDevice

蓝牙设备,是我们连接的设备

获取方法:

BluetoothData.SENSOR_DOWN_ADRESS = “20:16:05:25:32:31”; //MAC地址
BluetoothDevice sensor_down = mBluetoothAdapter.getRemoteDevice(BluetoothData.SENSOR_DOWN_ADRESS);

---------------------------------------------------------------------------------------------------

二、蓝牙开发使用的基本步骤

1、权限

这个在AndroidManifest.xml文件中添加权限,这个是必须要的

    //在程序中使用蓝牙功能
<uses-permission android:name="android.permission.BLUETOOTH"/>
//启动设备发现或操纵蓝牙设置
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

2、获得蓝牙适配器 BluetoothAdapter 对象 并根据获得结果判断当前设备是否支持蓝牙

BluetoothAdapter mBluetoothAdapter =  BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null){
//设备不支持蓝牙功能
Toast.makeText(this,"当前设备不支持蓝牙功能",Toast.LENGTH_SHORT).show();
return ;
}

3、在设备支持蓝牙功能的情况下,我们需要判断蓝牙功能是否开启,若没开启,需给之开启

isEnabled()判断是否打开蓝牙功能,enable()方法用于打开蓝牙功能

if(!mBluetoothAdapter.isEnabled()){
boolean enable = mBluetoothAdapter.enable(); //返回值表示 是否成功打开了蓝牙功能
if(enable){
Toast.makeText(this,"打开蓝牙功能成功!",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"打开蓝牙功能失败,请到'系统设置'中手动开启蓝牙功能!",Toast.LENGTH_SHORT).show();
return ;
}
}

4、查询已经配对的蓝牙设备

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
//如果有配对的设备
if(pairedDevices.size() > ){
ArrayList<String> mArrayAdapter = new ArrayList<>();
for(BluetoothDevice device : pairedDevices){
//通过array adapter在列表中添加设备名称和地址
mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
Log.i("bluetooth",device.getName() + "\n" + device.getAddress());
}
}else{
Toast.makeText(this,"暂无已配对设备",Toast.LENGTH_SHORT).show();
}

5、查询附近可用的蓝牙设备

方法很简单,就一句话

mBluetoothAdapter.startDiscovery();

注意此方法是异步执行的,相当于开启一个子线程,整个过程大约耗时12秒。

切记,当我们搜索并成功连接到我们需要的设备的时候,需要及时的关闭搜索行为,可以使用cancelDiscovery。

接下来我们需要写一个广播来接收查询到的设备数据

private final BroadcastReceiver mReceiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent){
String action = intent.getAction();
allBlueToothDevice = new ArrayList<>();
if(BluetoothDevice.ACTION_FOUND.equals(action)){
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.i("bluetooth","可配对设备:"+device.getName() + "\n" + device.getAddress());
}
}
};

记得在onCreate()方法中注册广播:

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

相关知识:

Android项目实战(二十五):蓝牙连接硬件设备开发规范流程

浅谈Bluetooth蓝牙开发的更多相关文章

  1. 浅谈iOS视频开发

     浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...

  2. 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.蓝牙综合介绍 3.精华文章汇总 4.结语 1.前言 大家好,我是董哥 ...

  3. 【Bluetooth|蓝牙开发】二、蓝牙开发入门

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! [所有文章汇总] 1.蓝牙基础概念 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电 ...

  4. 浅谈Android样式开发之布局优化

    引言 今天我们来谈一下Android中布局优化常用的一些手段.官方给出了3种优化方案,分别是</include>.</viewstub>.</merge>标签,下面 ...

  5. 浅谈移动Web开发(上):深入概念

    PPI 什么是PPI PPI的复杂之处在于如果他所属的上下文环境不同,意义也会完全不一样. 当我们在谈论显示设备的PPI时,它代指的屏幕的像素密度:当我们在谈论和图片相关时,我们谈论的是打印时的分辨率 ...

  6. 浅谈 Linux 内核开发之网络设备驱动

    转自http://www.ibm.com/developerworks/cn/linux/l-cn-networkdriver/ 网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想 ...

  7. 浅谈Android系统开发中LOG的使用

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...

  8. 浅谈web前端开发阅历

    WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没有学校的正轨教育,大多数人都是靠本人自学成才.本文次要引见本人从事web开发以来(从大二至今)看过的书籍和本人的成长过程,目的是给想了解Java ...

  9. NIO原理剖析与Netty初步----浅谈高性能服务器开发(一)

    除特别注明外,本站所有文章均为原创,转载请注明地址 在博主不长的工作经历中,NIO用的并不多,由于使用原生的Java NIO编程的复杂性,大多数时候我们会选择Netty,mina等开源框架,但理解NI ...

随机推荐

  1. poj 3630 Phone List

    #include<iostream> #include<cstdio> #include<cstring> #define N 100005 using names ...

  2. 引用类型-Array类型

    ECMAScript数组的每一项可以保存任何类型的数据,并且数组的大小是可以动态调整的. 创建数组的基本方式有两种,第一种是使用Array构造函数 var colors = new Array(); ...

  3. 相克军_Oracle体系_随堂笔记008-存储结构

    控制文件.数据文件.日志文件    放在存储上.   参数文件:数据库启动时读取,并不关闭,但是启动过后丢了也没事.一般放在服务器上. $ORACLE_HOME/dbs下   备份文件{     控制 ...

  4. RadioGroup、RadioButton、CheckBox、Toast用法

    xml布局文件如下: <RadioGroup android:id="@+id/sex" android:layout_width="wrap_content&qu ...

  5. 【JUC】JDK1.8源码分析之CopyOnWriteArrayList(六)

    一.前言 由于Deque与Queue有很大的相似性,Deque为双端队列,队列头部和尾部都可以进行入队列和出队列的操作,所以不再介绍Deque,感兴趣的读者可以自行阅读源码,相信偶了Queue源码的分 ...

  6. 数据库设计(1/9):数据元(Data Elements)

    对于设计和创建数据库完全是个新手?没关系,Joe Celko,世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多年 ...

  7. 微信小程序:原生热布局终将改变世界

    关于本文的所有观点都是网上收集,与作者本人没有任何关系! 最近朋友圈已经被微信小程序刷屏了,这也难怪,腾讯的产品拥有广泛的影响力,谁便推出个东西,都会有很多人认为会改变世界,这不,张小龙刚一发布微信小 ...

  8. CSS画猪

    效果查看:http://hovertree.com/texiao/css3/6/ CSS3画猪头: http://hovertree.com/texiao/css3/6/1/ 代码如下: <!D ...

  9. C#中IList与List

    C#中IList<T>与List<T>的区别感想 写代码时对: IList IList11 =new List (); List List11 =new List (); 有所 ...

  10. Android开发之重力传感器

    重力传感器与方向传感器的开发步骤类似,只要理清了期中的x,y,z的值之后就可以根据他们的变化来进行编程了,首先来看一副图 假设当地的重力加速度值为g 当手机正面朝上的时候,z的值为q,反面朝上的时候, ...