关于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 ...
随机推荐
- C++ 0x 使用可变参数模板类 实现 C# 的委托机制
#ifndef _ZTC_DELEGATE_H_ #define _ZTC_DELEGATE_H_ #include <vector> #include <functional> ...
- 吴裕雄 数据挖掘与分析案例实战(4)——python数据处理工具:Pandas
# 导入模块import pandas as pdimport numpy as np # 构造序列gdp1 = pd.Series([2.8,3.01,8.99,8.59,5.18])print(g ...
- ssh 设置反向代理
远程主机上/etc/ssh/sshd_config中,开启 GatewayPorts yes systemctl reload sshd 本地: ssh -CqTnN -R 0.0.0.0:9000: ...
- BlockingQueue深入解析-BlockingQueue看这一篇就够了
本篇将详细介绍BlockingQueue,以下是涉及的主要内容: BlockingQueue的核心方法 阻塞队列的成员的概要介绍 详细介绍DelayQueue.ArrayBlockingQueue.L ...
- LOG4J spring与mybatis整合
1.导入包log4j-1.2.17.jar <dependency> <groupId>log4j</groupId> ...
- Java连接MySQL数据库及操作
Java操作MySQL数据库,需要驱动mysql-connector-java 来进行操作,去下载对应的jar包 一.导入需要的jar包 我用的是maven对包进行管理,在maven中添加如下内容 ...
- ALL ANY SOME 这样解释好理解很多
--All:对所有数据都满足条件,整个条件才成立,例如:5大于所有返回的id select * from #A where 5>All(select id from #A) go --Any:只 ...
- clion register
1. 使用 activation code 激活 安装完软件后,启动,在要求输入注册码的界面(菜单栏 ⇒ help ⇒ register)选择“License server”输入“http://ide ...
- 一个性能较好的JVM参数配置
一个性能较好的web服务器jvm参数配置: -server//服务器模式-Xmx2g //JVM最大允许分配的堆内存,按需分配-Xms2g //JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次 ...
- 836. Rectangle Overlap 矩形重叠
[抄题]: A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of i ...