android蓝牙学习
学习路线
1 蓝牙权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> //安卓6.0版本需要位置权限
2 打开蓝牙
public void onOpen(View v) {
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); //获取蓝牙适配器
if (!bluetoothAdapter.isEnabled()) { //如果蓝牙是关闭的,则打开
bluetoothAdapter.enable();
showMessage("Open bluetooth");
} else {
showMessage("Bluetooth is already open");
}
}
3 扫描周围蓝牙(获取配对蓝牙)
扫描周围的蓝牙需要定义一个广播接收器
private BroadcastReceiver mReceiver=new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
Log.i("boye", action);
if(action.equals(BluetoothDevice.ACTION_FOUND)) {
BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //获取当前扫描到的设备
if(device.getBondState()==BluetoothDevice.BOND_BONDED) { //显示已配对设备
textView.append("\n"+device.getName()+"==>"+device.getAddress()+"\n");
Toast.makeText(context, "发现已配对设备:" + device.getName(), Toast.LENGTH_LONG).show();
} else if(device.getBondState()!=BluetoothDevice.BOND_BONDED) {
textView3.append("\n"+device.getName()+"==>"+device.getAddress()+"\n");
Toast.makeText(context, "发现未配对设备:" + device.getName(), Toast.LENGTH_LONG).show();
}
} else if(action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)){
textView2.setText("搜索完成...");
}
}
};
广播过滤器
IntentFilter filter=new IntentFilter(BluetoothDevice.ACTION_FOUND); //过滤出发现
registerReceiver(mReceiver,filter); //注册广播
IntentFilter filter2=new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); //过滤出扫描结束
registerReceiver(mReceiver,filter2); //注册广播
4 蓝牙配对
public void createBond(BluetoothDevice btDev, Handler handler) {
if (btDev.getBondState() == BluetoothDevice.BOND_NONE) {
//如果这个设备取消了配对,则尝试配对
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //安卓版本大于等于4.3
btDev.createBond();
}
} else if (btDev.getBondState() == BluetoothDevice.BOND_BONDED) {
//如果这个设备已经配对完成,则尝试连接
connect(btDev, handler);
}
}
5 蓝牙的连接
private void connect(BluetoothDevice btDev, Handler handler) {
try {
//通过和服务器协商的uuid来进行连接
mBluetoothSocket = btDev.createRfcommSocketToServiceRecord(BltContant.SPP_UUID);
if (mBluetoothSocket != null)
//全局只有一个bluetooth,所以我们可以将这个socket对象保存在appliaction中
BltAppliaction.bluetoothSocket = mBluetoothSocket;
Log.i("blueTooth", "开始连接...");
//在建立之前调用
if (getmBluetoothAdapter().isDiscovering())
//停止搜索
getmBluetoothAdapter().cancelDiscovery();
//如果当前socket处于非连接状态则调用连接
if (!getmBluetoothSocket().isConnected()) {
//你应当确保在调用connect()时设备没有执行搜索设备的操作。
// 如果搜索设备也在同时进行,那么将会显著地降低连接速率,并很大程度上会连接失败。
getmBluetoothSocket().connect();
}
Log.i("blueTooth", "已经连接");
if (handler == null) return;
//结果回调
Message message = new Message();
message.what = 4;
message.obj = btDev;
handler.sendMessage(message);
} catch (Exception e) {
Log.i("blueTooth", "...连接失败");
try {
getmBluetoothSocket().close();
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
6 蓝牙通信
(1)发送消息
public static void sendMessage(String message) {
if (BltAppliaction.bluetoothSocket == null || TextUtils.isEmpty(message)) return;
try {
//message += "\n";
OutputStream outputStream = BltAppliaction.bluetoothSocket.getOutputStream();
outputStream.write(message.getBytes("utf-8"));
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)接收消息
public static void receiveMessage(Handler handler) {
if (BltAppliaction.bluetoothSocket == null || handler == null) return;
try {
InputStream inputStream = BltAppliaction.bluetoothSocket.getInputStream();
byte[] buffer = new byte[200];
inputStream.read(buffer);
Log.i("boye收到的信息",new String(buffer));
Message message = new Message();
message.obj = new String(buffer);
message.what = 1;
handler.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
android蓝牙学习的更多相关文章
- Android 蓝牙学习
Android 蓝牙学习 学习缘由 上个礼拜公司要开发个简单的五子棋游戏!其中一个需求就是支持蓝牙对战!所以苦逼的我学习蓝牙方面的知识了! 简介 Bluetooth是目前使用最广泛的无线通讯协议,近距 ...
- Android蓝牙学习笔记
一 Bluetooth基本概念 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备.计算机及其终端设备.各种数字数据系统.甚至家用电器采用无线方式联接起来.它的传输距离为10cm-10m,如果增加 ...
- android蓝牙打印机
您还未登录!|登录|注册|帮助 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 reality_jie的专栏 编程的过程是一种微妙的享受 目录视图 摘要视图 订阅 CSDN2013 ...
- android 蓝牙4.0 开发介绍
最近一直在研究一个蓝牙功能 由于本人是菜鸟 学起来比较忙 一直搞了好久才弄懂 , 网上对蓝牙4.0也就是几个个dome 抄来抄去,全是英文注解 , 对英语不好的朋友来说 真是硬伤 , 一些没必要的描 ...
- 【转】android蓝牙开发---与蓝牙模块进行通信--不错
原文网址:http://www.cnblogs.com/wenjiang/p/3200138.html 近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝牙模块进行通信.开头的进展很顺利, ...
- Android 蓝牙开发(整理大全)
Android蓝牙开发 鉴于国内Android蓝牙开发的例子很少,以及蓝牙开发也比较少用到,所以找的资料不是很全. (一): 由于Android蓝牙的通信都需要用到UUID,如果由手机发起搜索,当搜索 ...
- android -- 蓝牙 bluetooth (四)OPP文件传输
在前面android -- 蓝牙 bluetooth (一) 入门文章结尾中提到了会按四个方面来写这系列的文章,前面已写了蓝牙打开和蓝牙搜索,这次一起来看下蓝牙文件分享的流程,也就是蓝牙应用opp目录 ...
- 深入了解Android蓝牙Bluetooth——《基础篇》
什么是蓝牙? 也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的.利用"蓝牙"技术,能够有效地简化掌上电脑.笔记本电 ...
- 深入了解Android蓝牙Bluetooth——《进阶篇》
在 [深入了解Android蓝牙Bluetooth--<基础篇>](http://blog.csdn.net/androidstarjack/article/details/6046846 ...
随机推荐
- Python中使用Mysql(安装篇)
准备工作 import MySQLdb Linux系统自带了Python,但并不是都有这个包,至少我每次拿到一台全新的服务器时候,都发现没有装这个包. 这个东西的下载地址是 http://source ...
- hdu1151有向图的最小顶点覆盖
有向图的最小路径覆盖=V-二分图最大匹配. Consider a town where all the streets are one-way and each street leads from o ...
- myeclipse的class文件编译设置
一,设置单个工程的class文件路径 右击工程,BulidPath——Configure Build Path
- MySQL开发总结(有点长..耐心看)
一.理解MySQL基本概念 1.MySQL软件:MySQL实际上就是一软件,是一工具,是关系型数据库管理系统软件 2.MySQL数据库:就是按照数据结构来组织.存储和管理数据的仓库 3.MySQL数据 ...
- JDK安装以及安装过程中出现的问题(日志二)
上一篇:初识hadoop-历史及其家族(日志一) 我安装的这个版本的Ubuntu,已经在java包中存在了,所以当使用java -version的时候,会出现下载包的提示,使用apt-get命令之后, ...
- python循环
#!/usr/bin/python #coding:utf-8 lcf_age = "19" count = 0 while count < 3: c_lcf_age = i ...
- PAT1029.Median (25)
(一)题目 题目链接:https://www.patest.cn/contests/pat-a-practise/1029 1029. Median (25) Given an increasing ...
- 学习笔记:javascript内置对象:数学对象
1.数学对象 -Math 2.对象常用属性 3.常用函数 4.对数值类型数据保留小数的函数
- AngularJS的this详解
[this详解] 1.谁最终调用函数,this指向谁. ① this指向的,永远只可能是对象!!!!!! ② thi ...
- Python: import vs from (module) import function(class) 的理解
Python: Import vs From (module) import function(class) 本文涉及的 Python 基本概念: Module Class import from . ...