关于android4.3 bluetooth4.0的那些事儿
马年伊始,刚刚上班的一个星期,公司里没什么事儿可做,只是听说马上可能要做蓝牙的项目。之前也做过关于软硬件通讯之类的项目:android 串口通讯,android usb 转串口通讯。
可是蓝牙这块还真是没有怎么接触过,只是以前每天论坛看博客看到过,跟网络通讯差不多,也是用到socket诸如此类的关键字,做通讯函数。可是这蓝牙4.0我听说是新的蓝牙协议,由TI公司做出来开发板的。没接触过,伤,真心伤!!!没办法,苦逼的程序员不都是这样的么!
蓝牙4.0为蓝牙3.0的升级标准,拥有极低的运行和待机功耗。Bluetooth Low Energy。针对android系统开发关于蓝牙4.0apk,首先要确定你所用的蓝牙开发板,用的最多的就是TI个公司的cc2540。android系统方面,如果是用android 的sdk那么系统就要在4.3以上了,如果是三星的sdk或者moto的sdk就没有那么的要求了,只要根据他提供的sdk说明来开发就行了。没办法老板死活不给三星的研发设备,所以本吊丝只能用android自带的sdk开发了,所以本篇随笔也只是针对Android4.3和ble的了。
官方android4.3 BLE开发文档:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html
官方android4.3 BLE开发sample:http://developer.android.com/samples/BluetoothLeGatt/index.html
pc端调试工具:
我相信有了官方文档的话开发起来应该不是很困难了,起码有了找到组织的赶脚。
废话太多了:
想要你的app能使用蓝牙,那么permissions是必然的,没有权限是干不了事情的:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
那么想要你的设备只有ble的有效那么还需要下面这句话:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
还要看你的设备是不是支持BluetoothLE设备。
// 判断此设备是否支持蓝牙4.0设备
if (!getPackageManager().hasSystemFeature(
PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT)
.show();
finish();
}
如果你的设备支持蓝牙4.0那么下面要做的事情就是初始化一下关于要用的蓝牙的参数了:
// Initializes Bluetooth adapter.
final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter(); // Is adapter null?
if (mBluetoothAdapter == null) {
Toast.makeText(this, "bluetooth4.0 is not supported!",
Toast.LENGTH_SHORT).show();
this.finish();
return;
}
关于上面第三行代码BluetoothAdapter mBluetoothAdapter。这个adapter可是个非常有用的东西,可以这么理解,它就是你手机的蓝牙。
看来你已经成功拿到你操控的蓝牙了,那么就要看看它当前是否能用。也就是要打开蓝牙。我是用ToggleButton这个控件来控制。
tb_on_off.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
Intent enableBtIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
} else {
mBluetoothAdapter.disable();
}
}
});
打开蓝牙后,下面就要搜索外围设备了。
/**
* @Title: scanLeDevice
* @Description: 搜索设备
* @param @param enable
* @return void
* @throws
*/
private void scanLeDevice(final boolean enable) {
if (enable) {
mHandler.postDelayed(new Runnable() { @Override
public void run() {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}, SCAN_PERIOD); mScanning = true;
mBluetoothAdapter.startLeScan(mLeScanCallback);
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}
private BluetoothAdapter.LeScanCallback mLeScanCallback = new LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi,
byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mDevListAdapter.addDevice(device);
mDevListAdapter.notifyDataSetChanged();
}
});
}
};
搜索到你想要的设备后连接设备。
BluetoothGatt mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
BluetoothGatt我所理解的就是一台计算机的cup,收发处理数据都要靠它。
设备已经连接上了那么就可以了干一些事情了,比如收发数据。这里就不详细说明了,我会把demo上传来,仅供参考。
对了还要补充一点,就是ble,android4.3sdk中数据传输不是用socket这样的关键字了。这个官方文档已经说的很详细了,所以这篇博客写的比较粗糙。^-^!!!
demo连接:http://pan.baidu.com/s/1bn061nL
关于android4.3 bluetooth4.0的那些事儿的更多相关文章
- VC-关于VC++ 6.0的那些事儿
Microsoft Visual C++,(简称Visual C++.MSVC.VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言.VC+ ...
- iTOP-i.MX6Q开发板支持安卓Android6.0系统
迅为IMX6开发板: Android4.4/6.0系统 Linux + Qt5.7系统 Ubuntu12.04系统 部分案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 核心板兼容 ...
- Android 开发中 iBeacon的使用
iBeacon的工作原理是基于Bluetooth Low Energy(BLE)低功耗蓝牙传输技术,iBeacon基站不断向四周发送蓝牙信号,当智能设备进入设定区域时,就能够收到信号.只要满足iBea ...
- 深入了解Android蓝牙Bluetooth——《进阶篇》
在 [深入了解Android蓝牙Bluetooth--<基础篇>](http://blog.csdn.net/androidstarjack/article/details/6046846 ...
- Android编译过程中的碎碎念
刷机不是用rom包吗?怎么可以使用fastboot flashall -w将*.img文件刷入呢? 在Mac上面可以参考这篇文章进行刷机.概括来说解释从官方下载rom包,解压后运行./flash-al ...
- Android 5.1 AOSP 源码获取
本文已同步更新至:http://dxjia.cn/2015/08/android-aosp-code-sync/ Android 5.1源码开放有一个多月啦,但由于城墙的关系,每次想着更新最新源码学习 ...
- CC2540开发板学习笔记(五)——串口通信
(一)串口发送 一.实验现象: 开发板实现功能发送 二.实验过程 1.PL2303 USB转串口电路图 2.串口发送 (1)查看用户手册有: UART0 对应的外部设备 IO 引脚关系为: P0_2 ...
- 嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)
0x00 前言 随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡在 ...
- iOS蓝牙中的进制转换
Bluetooth4.0.jpg 最近在忙一个蓝牙项目,在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16 ...
随机推荐
- Python环境配置, atom-python配置
环境变量 路径 在window下配置环境变量,配置到文件夹级就可以了: D:\program\python3 编码 因为windows默认的编码是ASIIC,所以使用atom时候中文是乱码,需要在环境 ...
- DNN例子
[Tensorflow DNNClassifier ValueError]http://stackoverflow.com/questions/40264622/tensorflow-dnnclass ...
- RedisTemplate Redis 操作
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向r ...
- Baidu URL的部分参数
[Baidu URL的部分参数] 1.Baidu Form表单如下: 2.部分参数解析 wd 查询关键字,就是你要搜索的内容. bs 上一次搜索的词或者内容: rn 搜索结果页每页显示的数目,默认 ...
- SSL原理分析
SSL协议的工作流程: 服务器认证阶段: 1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接: 2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则 ...
- nyoj528-找球号(三) 【位运算】
http://acm.nyist.net/JudgeOnline/problem.php?pid=528 找球号(三) 时间限制:2000 ms | 内存限制:3000 KB 难度:2 描述 ...
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(二)
使用ListView控件进行修改,删除与添加操作1.页面代码: <asp:ListView ID="lv2" runat="server" onpagep ...
- 兼容主流浏览器的css渐变色
网页中的渐变色区域,渐变色背景,一般都是通过ps图片方法来实现,但是图片放得多了会影响网页的打开速度,本文介绍的就是用纯 CSS 实现 IE .Firefox.Chrome 和 和Safari都支持的 ...
- IO模型与select,poll,epoll
五种:阻塞,非阻塞,IO复印,信号驱动,异步. select,poll,epoll select: 典型用32个32位的整数表示1024个描述符,并发的局限. poll:功能同上,但数据结构不一样(链 ...
- swift - 网络请求数据处理 - 协议处理
1. 在类的模型之中或类的结构体 里面 实现下面方法 /// 添加预约数据源模型 - rootModel class DataModelForAddNewBespeakModel: NSObject ...