马年伊始,刚刚上班的一个星期,公司里没什么事儿可做,只是听说马上可能要做蓝牙的项目。之前也做过关于软硬件通讯之类的项目: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的那些事儿的更多相关文章

  1. VC-关于VC++ 6.0的那些事儿

    Microsoft Visual C++,(简称Visual C++.MSVC.VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言.VC+ ...

  2. iTOP-i.MX6Q开发板支持安卓Android6.0系统

    迅为IMX6开发板: Android4.4/6.0系统  Linux + Qt5.7系统  Ubuntu12.04系统 部分案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 核心板兼容 ...

  3. Android 开发中 iBeacon的使用

    iBeacon的工作原理是基于Bluetooth Low Energy(BLE)低功耗蓝牙传输技术,iBeacon基站不断向四周发送蓝牙信号,当智能设备进入设定区域时,就能够收到信号.只要满足iBea ...

  4. 深入了解Android蓝牙Bluetooth——《进阶篇》

    在 [深入了解Android蓝牙Bluetooth--<基础篇>](http://blog.csdn.net/androidstarjack/article/details/6046846 ...

  5. Android编译过程中的碎碎念

    刷机不是用rom包吗?怎么可以使用fastboot flashall -w将*.img文件刷入呢? 在Mac上面可以参考这篇文章进行刷机.概括来说解释从官方下载rom包,解压后运行./flash-al ...

  6. Android 5.1 AOSP 源码获取

    本文已同步更新至:http://dxjia.cn/2015/08/android-aosp-code-sync/ Android 5.1源码开放有一个多月啦,但由于城墙的关系,每次想着更新最新源码学习 ...

  7. CC2540开发板学习笔记(五)——串口通信

    (一)串口发送 一.实验现象: 开发板实现功能发送 二.实验过程 1.PL2303 USB转串口电路图 2.串口发送 (1)查看用户手册有: UART0 对应的外部设备 IO 引脚关系为: P0_2 ...

  8. 嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)

    0x00 前言 随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡在 ...

  9. iOS蓝牙中的进制转换

    Bluetooth4.0.jpg 最近在忙一个蓝牙项目,在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16 ...

随机推荐

  1. Lodash踩坑记录

    一直在用lodash 这个框架,最近踩了一个坑 reverse 这个函数是mutable的 ,后边去查了文档 Note: This method mutates array and is based ...

  2. Delphi 创建一个url网址快捷方式代码

    procedure CreateURLShortcut(const ShortcutFile, URL: string); var F: TextFile; // text file begin {$ ...

  3. homework 补第三题

    上次只写了两道题 发现少了一道 所以今天补上    4 . 另外补上今天的程序代码 代码 1. 2. 3 4 运行截图 1. 2 3

  4. hibernate事务隔离机制

    事务的基本概念 ACID:A是atomicity(原子性),C是consistency(一致性),I是isolation(隔离性),D是durability(持久性) 事务隔离级别从低到高: 读取未提 ...

  5. 根据条件决定是否为input设置只读属性

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  6. docker 入門

    http://dockone.io/article/277 我的碎碎念:Docker入门指南 [编者的话]之前曾经翻译过很多Docker入门介绍的文章,之所以再翻译这篇,是因为Anders的角度很独特 ...

  7. Ajax的get方式传值 避免& 与= 号

    js代码 例如: var name = $("#name”).value;//为a&b=7 name=encodeURLComponent(name); 可以将a&b=7转化 ...

  8. MVVM 的理解

    MVVM 是 Model - View - ViewModel 的缩写 可以看到他和之前的MVC很像,的确有人称之为一个加强优化版的MVC. 是一种模块化开发代码分层的思想或者框架! MVVM 的优点 ...

  9. Eclipse 中 program arguments 与 VM arguments 的区别

    1. program arguments 中的值作为 主函数中的参数args[] 传入 2. VM Arguments 是设置的java虚拟机的属性,这些系统属性都以-D开头, VM argument ...

  10. python中的&&及||

    首先说明一下,在python中是没有&&及||这两个运算符的,取而代之的是英文and和or.其他运算符没有变动. 接着重点要说明的是python中的a.any(),我之所以会涉及到这个 ...