ShareThis

- By Vikas Verma

Bluetooth low energy (BLE) is a feature of Bluetooth 4.0 wireless radio technology, aimed at new, principally low-power and low-latency, applications for wireless devices within a short range. As I discussed in my previous blog about BLE in Android, it has been acknowledged that using this technology in devices will lead to very less power consumption and increase in performance. BLE being a latest technology and in the development mode, is not being used by many devices as of now but this is poised to change soon. It will soon become an essential part of devices that use Bluetooth.

As the Bluetooth Low Energy stack is available with some third party
vendors, they have their own set of APIs for BLE programming. You just
need to include their API add-ons into your Android apps to access the
BLE features.

As we know that in Android, there is no generic API for BLE. Different vendors give their own API's for Android App development.
Here we are going to discuss about Motorola API. The profile
specification allows performing the read and writing operations only
when the Bluetooth Low Energy API's allow connecting with the
remote device.

Some developments have been done with BLE to support the latest Android version ICS (Ice Cream Sandwich) and I have tried to summarize some useful information for you to implement with your latest Motorola device having ICS.

Use this link to download the Add-on for ICS (Ice Cream Sandwich) operating system.

Two libraries, BluetoothGattService.jar and BluetoothGatt.jar are used in Android project.

You need to create two files:

i) android.bluetooth.IBluetoothGattProfile; //This file needs to be created

interface IBluetoothGattProfile {
void onDiscoverCharacteristicsResult(in String path, in boolean result);
void onSetCharacteristicValueResult(in String path, in boolean result);
void onSetCharacteristicCliConfResult(in String path, in boolean result);
void onUpdateCharacteristicValueResult(in String path, in boolean result);
void onValueChanged(in String path, in String value);
}

ii)com.motorola.bluetooth.bluetoothle.IBluetoothGattCallback; //This file needs to be created

/**
* System private API for Bluetooth GATT Service
*
*
*/

oneway interface IBluetoothGattCallback
{
void indicationGattCb (in BluetoothDevice device, String uuid, String char_handle, in String[] data);
void notificationGattCb (in BluetoothDevice device , String uuid, String char_handle, in byte[] data);
}

Now in main activity, initially you have to scan for bluetooth devices and then check for the BLE device by calling function getBluetoothDeviceType(). If it returns LE that means the device you scanned for is a BLE device

After that you need to call getGattServices(uuid, device) for searching the primary device.

private boolean getGattServices(ParcelUuid uuid, BluetoothDevice btDevice)
{
Log.d(TAG, "Calling btDevice.getGattServices");
return btDevice.getGattServices(uuid.getUuid());
}

Parameters

Device: Device address of the GATT server being connected to.
Uuid: UUID of the primary service to which your profile is connecting.

Then you get the broadcast with the action BluetoothDevice.ACTION_GATT and then call the function

getBluetoothGattService(selectedServiceObjPath, uuid);

private void getBluetoothGattService(String objPath, ParcelUuid uuid)
{
if (mDevice != null)
{
BluetoothGattService gattService = new BluetoothGattService(mDevice,uid,objPath,btGattCallback);

if (gattService != null)
{
uuidGattSrvMap.put(uuid, gattService);
return;
}
else
{
Log.e(TAG, "Gatt service is null for UUID");
}
}
else
{
Log.e(TAG, mDevice is null");
}
mLeState = DISCONNECTED;
Toast.makeText(mContext,"Connection Failed", Toast.LENGTH_SHORT).show();
}

Parameters in BluetoothGattService

device: device address of the GATT server being connected to.

Uuid : UUID of the primary service to which your profile is connecting.

Callback: IBluetoothGattProfile.Stub objects that receives user data from the connected service.

Methods used by Bluetooth LE profiles

i) How to read the value of a service
gattService.updateCharacteristicValue(objPath)
objPath is a mapped path for the service you want to read.

ii) How to write a value
gattService.writeCharacteristicRaw(objPath, data, true);
objPath is a mapped path for the service you want to write.
Data is a byte array which you want to write

iii) How to disconnect
gattService.close();

NOTE: You can find the sample inside the Motorola
Add-ons. The above mentioned API is still in development mode and you
might come across with some development issues (bugs) as it is a BETA
Release.

How to Implement Bluetooth Low Energy (BLE) in Ice Cream Sandwich的更多相关文章

  1. Bluefruit LE Sniffer - Bluetooth Low Energy (BLE 4.0) - nRF51822 驱动安装及使用

    BLE Sniffer https://www.adafruit.com/product/2269 Bluefruit LE Sniffer - Bluetooth Low Energy (BLE 4 ...

  2. Android bluetooth low energy (ble) writeCharacteristic delay callback

    I am implementing a application on Android using BLE Api (SDK 18), and I have a issue that the trans ...

  3. Android Bluetooth Low Energy (BLE)简单方便的蓝牙开源库——EasyBLE

    源码传送门 最新版本 功能 支持多设备同时连接 支持广播包解析 支持连接同时配对 支持搜索系统已连接设备 支持搜索器设置 支持自定义搜索过滤条件 支持自动重连.最大重连次数限制.直接重连或搜索到设备再 ...

  4. Overview and Evaluation of Bluetooth Low Energy: An Emerging Low-Power Wireless Technology

    转自:http://www.mdpi.com/1424-8220/12/9/11734/htm Sensors 2012, 12(9), 11734-11753; doi:10.3390/s12091 ...

  5. Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)

    背景 在学习BLE的过程中,积累了一些心得的DEMO,放到Github,形成本文.感兴趣的同学可以下载到源代码. github: https://github.com/vir56k/bluetooth ...

  6. Bluetooth Low Energy 嗅探

    Bluetooth Low Energy 嗅探 路人甲 · 2015/10/16 10:52 0x00 前言 如果你打开这篇文章时期望看到一些新的东西,那么很抱歉这篇文章不是你在找的那篇文章.因为严格 ...

  7. Bluetooth Low Energy介绍

    目录 1. 介绍 2. 协议栈 3. 实现方案 3.1 硬件实现方案 3.2 软件实现方案 1. 介绍 Bluetooth low energy,也称BLE(低功耗蓝牙),在4.0规范中提出 BLE分 ...

  8. Bluetooth Low Energy 介绍

    1.简介 BLE(Bluetooth Low Energy,低功耗蓝牙)是对传统蓝牙BR/EDR技术的补充.尽管BLE和传统蓝牙都称之为蓝牙标准,且共享射频,但是,BLE是一个完全不一样的技术.BLE ...

  9. Bluetooth® Low Energy Beacons

    Bluetooth® Low Energy Beacons ABSTRACT (abstract ) 1.This application report presents the concept of ...

随机推荐

  1. 出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法

    遇到这种问题是因为我新建了Areas,在Areas里面建Controllers,Models,Views.所以在View文件夹下面湿没有Web.config文件的. 解决方法:(复制views中的we ...

  2. ZOJ 3872 Beauty of Array (The 12th Zhejiang Provincial Collegiate Programming Contest )

    对于没有题目积累和clever mind的我来说,想解这道题还是非常困难的,也根本没有想到用dp. from: http://blog.csdn.net/u013050857/article/deta ...

  3. 如何使用10个小时搭建出个人域名而又Geek的独立博客?

    1.安装准备软件 Node.js.Git.GitHub DeskTop(前两个必须安装,后者可选) 2.本地搭建hexo框架.配置主题.修改参数.实现本地测试预览 3.链接GitHub.实现在线预览 ...

  4. 解密FFmpeg播放状态控制内幕

    上一篇文章(http://my.oschina.net/u/2336532/blog/400790)我们解决了在FFmpeg下如何处理H264和AAC的扩展数据,根据解出的NALU长度恢复了H264的 ...

  5. Elementary os的安装

      1.         使用安装文件进行数据读取 2.         进入安装界面 3.         选择语言并进行安装(可以先试用) 4.         选择继续(可以勾选两个选项,意思是 ...

  6. 【原创】Tomcat集群环境下对session进行外部缓存的方法(2)

    Session对象的持久化比较麻烦,虽然有序列化,但是并不确定Session对象中保存的其他信息是否可以序列化,这可能是网上很多解决方案摒弃此种做法的原因,网上的很多做法都是将Session中的att ...

  7. Windows2003计划任务设置操作手册

    任务需要重复执行,windows操作系统可以通过 任务计划的配置 达到效果:以下以windowsServer2003为例 1. Windows Server 2003 系统进入控制面板-任务计划 2. ...

  8. 关于App Transport Security的更新,中英文对照 --Xcode 7 --iOS9

    章节都为本人定义,无抄袭,其中英文部分内容为官方文档摘抄以及自己总结,翻译的不好,敬请指正 App Transport Security(暂且翻译为app传输安全) What is ATS? App ...

  9. 【百度地图API】JS版本的常见问题

    1.请问如何将我的店铺标注在百度地图上?我是否可以做区域代理?在百度地图上标注是否免费? 答复: 这里只负责API的技术咨询,不解决任何地图标注问题.在百度地图上标注自己公司,即气泡标注业务.该业务已 ...

  10. DTCMS 新建下拉列表控件

    初始化的时候: ddlpmzcName.DataSource = new DTcms.BLL.auction().GetpmzcName();ddlpmzcName.DataTextField = & ...