android蓝牙模块

如何借助蓝牙模块使用 Android 手机控制 Arduino 原文:How to Control Arduino Board Using an Android Phone and a Bluetooth Module 作者:kerimil 翻译:安翔 审校:屠敏,关注物联网、移动开发领域,寻求报道或投稿请发邮件tumin@youkuaiyun.com。 本教程将教你借助一个蓝牙模块和 MIT’s app inventor(App Inventor... 阅读详情

在使用android蓝牙功能之前,首先需要在项目里添加权限去打开蓝牙访问功能.

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />

在添加权限后就可以使用蓝牙的相关功能啦。

首先在功能使用前,需要确认的是该手机是否具有蓝牙功能?蓝牙是否开启?以及蓝牙的开启及其关闭?

// 设备是否支持蓝牙
public static boolean isBluetoothSupported() {
	return BluetoothAdapter.getDefaultAdapter() != null ? true : false;
}

// 蓝牙是否开启
public static boolean isBluetoothEnabled() {
	BluetoothAdapter bluetoothAdapter = BluetoothAdapter
			.getDefaultAdapter();
		if (bluetoothAdapter != null) {
		return bluetoothAdapter.isEnabled();
	}
	return false;
}

// 强制打开/关闭蓝牙
public static boolean turnOnBluetooth(boolean flag) {
	BluetoothAdapter bluetoothAdapter = BluetoothAdapter
			.getDefaultAdapter();

	if (bluetoothAdapter != null) {
		if (flag)
			return bluetoothAdapter.enable();
		else
			return bluetoothAdapter.disable();
	}
	return false;
}

最后的方法是根据传入的值来确定是关闭蓝牙还是开启蓝牙,但是如果在强制开启蓝牙失败后返回false,也就是该手机并不支持此方法打开蓝牙的话,我们就需要做好异常情况处理。使用Intent来时用户自己打开手机蓝牙。并在onActivity.....的返回方法中接收返回1的req,并在该返回值中判断Result_OK和Cancel就可以实现蓝牙打开功能了。

Intent mIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(mIntent, 1);

在之前蓝牙打开之后就可以使用我们的蓝牙模块了,BluetoothAdapter类是我们需要知道类的第一步。

mBtAdapter = BluetoothAdapter.getDefaultAdapter();得到我们需要的对象,从中找到我们需要的蓝牙独立对象。

Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();得到曾经适配过的蓝牙对象集合可配对蓝牙都在BluetoothDevice对象中可以找到。

而搜索蓝牙集合需要用到广播机制。

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);开始扫描蓝牙

filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);结束扫描蓝牙

filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);蓝牙开关

filter.addAction(BluetoothAdapter.ACTION_BOND_STATE_CHANGED);状态改变(没有试过)

最后一个没有成功,可能是因为我接的蓝牙是公司的设备。

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
	@Overridepublic void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		if (BluetoothDevice.ACTION_FOUND.equals(action)) {
		} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
		} else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
			// 状态
			int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
			switch (blueState) {
				case BluetoothAdapter.STATE_ON:
				break;
				case BluetoothAdapter.STATE_OFF:
				break;
			}
		}
	}
};

在此广播接收者中来寻找仔细需要的对应接收处理对象。

在注册仔细的蓝牙接收者之后,就需要来进行搜索蓝牙了。
mBtAdapter.startDiscovery();蓝牙扫描

mBtAdapter.cancelDiscovery();关闭蓝牙扫描

推荐使用这种方法来完整的蓝牙扫描功能:

// 搜索蓝牙
if (mBtAdapter.isDiscovering())
mBtAdapter.cancelDiscovery();
mBtAdapter.startDiscovery();
 

来确保安全的进行蓝牙扫描。开始之后就可以等待广播接收者中读取搜索到的蓝牙对象了。

if (BluetoothDevice.ACTION_FOUND.equals(action)) {
	BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
	if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
	}
}

所有的蓝牙数据都在BluetoothDevice中可以找到。 


在此,就完成了蓝牙对象单独处理前的所有准备工作。

在得到蓝牙对象BluetoothDevice后,得到与之对应的Address:address = device.getAddress();,因为我是对蓝牙设备而不是手机中,所有更多连接请看这篇博客(这篇博客)。 

 在得到BluetoothDevice对象后,就要进行蓝牙连接,首先该过程是UI堵塞情况,需要开启线程异步处理,用到Handler机制。

mBluetoothAdapter.cancelDiscovery();
try {
	if (mSocket == null)
	mSocket = device.createRfcommSocketToServiceRecord(GlobalConstants.UUID_SPP);
	mSocket.connect();
} catch (IOException e) {
	e.printStackTrace();

	try {
		mSocket = (BluetoothSocket) device.getClass().getMethod("createRfcommSocket",
								new Class[] { int.class }).invoke(device, 1);
		mSocket.connect();
	} catch (IllegalAccessException e1) {
		e1.printStackTrace();
	} catch (IllegalArgumentException e1) {
		e1.printStackTrace();
	} catch (InvocationTargetException e1) {
		e1.printStackTrace();
	} catch (NoSuchMethodException e1) {
		e1.printStackTrace();
	} catch (IOException e1) {
		e1.printStackTrace();
	}
}
if (mSocket.isConnected()) {
	if (flag) {
		// 蓝牙配对成功
	}
} else {
	if (flag) {
		// 蓝牙配对失败
	}
}

在此用到了一个UUID,这个UUID网络上有很多

UUID UUID_SPP = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

这是我使用的。

在很多博客中都推荐直接使用java反射来连接蓝牙,而此我分开来连接,确保完整性吧。此时我们就连接至该设备的蓝牙了数据都可以通过mSocket来获取,

 mSocket.getInputStream();读流,使用循环来读取

 mSocket.getOutputStream();写流

在最后我们要做好finally的保护机制,在流结束,连接结束时就需要在此及时关闭所有的连接。


安卓与蓝牙模块通信 安卓与蓝牙模块通信安卓通过蓝牙通信小案例简介声明全局变量扫描蓝牙(未匹配的和已匹配的)连接蓝牙如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 安卓通过蓝牙通信小案例 安卓通过自身的蓝牙模块(驱... 阅读详情

相关推荐

Android Arduino 蓝牙模块通信源代码

首先是Android的,个人觉得最好的源代码是https://github.com/plastygrove/BlueSerial

StillIvan的专栏 3713

android蓝牙模块IBluetooth与IBluetoothManager详解

IBluetooth与IBluetoothManager介绍,了解过程

DamonMasty的博客 3812

android 连接蓝牙模块教程附源码

由于最近项目需要连接蓝牙,类似于智能手环连接蓝牙模块,网上找了些教程,有一些零零散散的程序,自己于是也写了一个能用,然后我发现谷歌有一个蓝牙的sample,一对比突然发现自己写的好low,不严谨。于是就直接 谷歌 例程,修改了部分。首先当初写的时候我有以下几个疑问。 1.如何实现又蓝牙又能接受数据,又能发送数据,这样不会冲突嘛? 2.UUID是啥,蓝牙模块的uuid又是啥? 3.网上程序有客

findMore_fun的博客 1万+

深入了解Android蓝牙Bluetooth【基础+进阶】

蓝牙发展至今经历了8个版本的更新。当然5.0的蓝牙模块目前Google虽已发布,但是市场上还未见到5.0的蓝牙设备。那么我们就尽请期待5.0蓝牙设备的到来!那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙也就是蓝牙ble,当然4.x版本的蓝牙也是向下兼容的。android手机必须系统版本4.3及以上才支持BLE API。一个主设备比如手机,一个从设备(这里也成为子设备或从机)主动搜索从机 可以发送 也可以接收, 从机也可以发送和接收 但只能被搜索。

m0_70748458的博客 4250

Android手机无法连接HC-05蓝牙模块

Android手机无法连接HC-05蓝牙模块

weixin_46666263的博客 1万+

安卓手机与蓝牙模块联合调试(一)——蓝牙模块的串口通讯

系列博文: (1)安卓手机与蓝牙模块联合调试(一)——蓝牙模块的串口通讯 (2)安卓手机与蓝牙模块联合调试(二)—— 单片机蓝牙控制LED灯亮灭(上) (3)安卓手机与蓝牙模块联合调试(三)—— 单片机蓝牙控制LED灯亮灭(下) 本教程的项目地址:1989Jiangtao/BluetoothSCM: 安卓手机通过蓝牙与单片机通信-发送指令/接收数据 最近项目有需求要蓝牙,在有了一些仪器......

菜鸟江涛的博客 6万+

android蓝牙模块有哪些类型,Android 蓝牙模块框架分析

Android Bluedroid 框架图 蓝牙组件Bluetooth core stack libraryHCI libraryVendor Specific HCI libraryUART, RFKILL,TUN/TAP and UHID device drivers相关模块bluetooth.apk : packages\apps\Bluetooth目录下libbluetooth_jni...

weixin_33324435的博客 1252

安卓手机与蓝牙模块联合调试:蓝牙模块的串口通信

本文将介绍如何在安卓手机上实现与蓝牙模块的串口通信,并提供相应的源代码。本文详细介绍了如何在安卓手机上实现与蓝牙模块的串口通信,包括配置蓝牙权限和特性、初始化蓝牙适配器、搜索和配对蓝牙设备以及连接蓝牙设备并进行串口通信的步骤。需要注意的是,上述代码仅为示例,实际应用中需要根据具体的需求进行适当的修改和完善,例如异常处理、线程管理、数据解析等。连接蓝牙设备并进行串口通信是实现安卓手机与蓝牙模块联合调试的关键步骤。在安卓应用中,我们需要使用蓝牙适配器来管理蓝牙设备的连接和通信。方法接收蓝牙模块发送的数据。

ReElixir的博客 413

Android开发-蓝牙模块

本文是基于Android Studio下的Bluetooth的相关开发,记录一些开发笔记。 转自lil-Xing个人博客 API基础 BluetoothAdapter——本地蓝牙适配器 BluetoothAdapter是所有蓝牙交互的入口,通过这个类,能够发现其他的蓝牙设备,查询已配对设备的列表,使用已知的MAC地址来实例化一个BluetoothDevice对象,并且创建一个Blueto...

lil-Xing's Blog 823

android蓝牙模块源码分析

如果您有android源码,并像分析蓝牙源码模块的简单内容,可以看看此文档,这只是简单的ppt文档

ADS 2024实战:手把手教你搞定CGH40010F的Doherty功放仿真与版图(附避坑指南)

本文详细介绍了使用ADS 2024进行CGH40010F Doherty功放从仿真到版图的全流程设计,涵盖器件建模、稳定性分析、负载牵引匹配和版图联合仿真等关键步骤。特别针对新手常见问题提供避坑指南,帮助工程师高效完成射频功放设计,提升5G基站和雷达系统的性能。

weixin_42528191的博客 221

Android中蓝牙模块的使用

由于近期正在开发一个通过蓝牙进行数据传递的模块,在参考了有关资料,并详细阅读了Android的官方文档后,总结了Android中蓝牙模块的使用。 1. 使用蓝牙的响应权限 HTML code uses-permission android:name="android.permission.BLUETOOTH" /> uses-permission android:name="and

little by little的专栏 3872

从打印攻击到视频重放:手把手用OULU-NPU训练你的第一个活体检测模型

本文详细介绍了如何使用OULU-NPU数据集训练活体检测模型,以应对打印攻击和视频重放等安全威胁。通过PyTorch框架,从环境准备、数据加载、预处理到模型架构设计,手把手教你构建一个高效的双流网络,结合CNN和LSTM技术,提升模型在多种攻击场景下的检测准确率。

weixin_29092031的博客 388

cc2540 android,手机APP通过CC2541蓝牙模块来控制LED等,附安卓APP源码

//基于CC2541蓝牙模块与单片机的串口通信#include #include #include unsigned char tmp;unsigned int c=0;sbit led1=P2^0; //指示灯0sbit led2=P2^1; //指示灯1sbit led7=P2^6; //指示灯sbit led...

weixin_36036029的博客 688

MATPOWER的安装详细教程

MATPOWER的安装包实际为一个程序包,安装教程很简单,详见本文。

半个月亮Zz的博客 3万+

CSS字体样式全攻略

🧱 让文字有空间感,适合标题或LOGO。🖋️适合插画、创意工作者的个人页面。🔥 适合标题、品牌名,视觉冲击力强。🧘‍♀️适合极简设计、文化类网站。✨适合科技类网站、博客、作品集。🚀适合游戏、AI、科技类项目。🐰 适合儿童类网站或节日氛围。📖适合时尚、生活方式类内容。🌫️ 适合神秘、梦幻主题。🌃 夜店风、科技感十足。具体效果是文字会上下跳动。

dreams_dream的博客 1807

python写安卓app控制蓝牙_如何使用蓝牙模块从Android设备控制Arduino

步骤1:您需要:1。 JY-MCU蓝牙无线串行端口模块。http://www.dealextreme.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299或搜索“蓝牙模块” “在ebay我以$ 8.20的价格在Dealextreme上买了我的。2。具有蓝牙功能的Android设备。3。 Arduino开发板。4。步骤2:...

weixin_39531761的博客 541

基于用户的协同过滤算法(userCF)

1.定义 userCF:当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。 基于用户的协同过滤算法主要包括两个步骤: 2.第一步:找到和目标用户兴趣相似的用户集合。 利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过...

jiangdongxiaobawang的博客 1万+

Android 与蓝牙模块通信

** android 蓝牙通信 ** 前言 安卓小白,想了解一下蓝牙通信,就做了这个东西 蓝牙模块 采用的是HC-05型号的蓝牙模块 用 usb-ttl 与 蓝牙模块 连接 VCC接VCC GND接GND Tx Rx交叉连接 使用串口助手调试 波特率为9600 android端 先上效果图 界面搭建 <?xml version="1.0" encoding="utf-8...

番茄小炒西红柿 1152

电影票购票小程序搭建(源码部署)

答:为用户提供便捷的购票方式,包括授权登录、个性化推荐、在线选座、订单管理等功能,同时在界面设计上注重用户友好性,简化用户的购票流程。答:通过展示电影院的优惠活动和票价信息,同时提供电影推荐功能,根据用户的历史购票记录和电影评分推荐个性化的电影列表,吸引用户购票。编写页面逻辑代码:使用JavaScript编写小程序页面的逻辑代码,实现电影列表的获取、电影详情的展示、座位选择的逻辑等。设计小程序界面:使用WXML和WXSS编写小程序的界面代码,实现电影列表的展示、电影详情的样式、座位选择页面的布局等。

2301_79072569的博客 2068

电子元器件选型与实战应用—01 电阻选型

大家好, 我是记得诚。这是《电子元器件选型与实战应用》专栏的第一篇文章,今天的主角是电阻,在每一个电子产品中,都少不了电阻的身影,其重要性不言而喻。

记得诚 3538

android蓝牙传输脉冲,求教如何制作一个安卓手机蓝牙制作的app程序,用于和单片机上的蓝牙模块,实现数据的传送...

下位机,用串口和蓝牙模zd块连接,通信上位机,安卓app开发用eclipse或者是android studio,蓝牙有相关的函数,,连接,断开,接受,网上大部分代码套着用就行了,,如果需要修改也修改的不多,,主ui界面的时候,不能有版进程的占用和其他的一些的线程的操作,所以就得到子线程里面去执行权了,还是先学学基础吧,之后再看这些的话,就容易的多了追问蓝牙有关的函数不知道,基础会一点点,有现成的代...

weixin_39986171的博客 677

高速信号设计中的关键测试项目与测试仪器详解

高速信号设计是一个多维度协同优化的系统工程。时域分析如同外科手术刀般精准定位物理缺陷,频域分析提供传输通道的频谱指纹,信号质量评估量化系统鲁棒性,接收端容限测试验证极端工况下的可靠性,协议一致性确保生态互操作性,而电源完整性则直指诸多信号问题的根源。

u014344410的博客 218

用hc05蓝牙模块,开发了几个安卓app了,越来越熟悉蓝牙app了。

用hc05蓝牙模块,开发了几个安卓app了,越来越熟悉蓝牙app了。

usbfans的专栏 3179

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

蓝牙模块 hc06 linux,安卓蓝牙 HC-06蓝牙模块 最简单例程

项目说明:手机和HC-06蓝牙模块通信,其他模块行不行你测试一下,我也不知道,上图Screenshot_2019-10-15-20-59-56-287_com.example.le(1).jpgapp长这样,功能描述1,先手动开启蓝牙,并配对设备2、点击查看已经配对设备按钮,在屏幕上打印出已经配对的设备名称和mac地址3、长按复制你要连接的设备mac地址到连接按钮签名的框框,注意前后不要有空格4、...

weixin_34795892的博客 808

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: ios之swift,新的开始
下一篇: Android网络请求(HTTP)
羊羊爱代码
博客等级 码龄11年 8粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值