Android5.0 BLE 周边(BluetoothLeAdvertiser)

具有低功耗蓝牙模块的设备可以扮演2个角色,中心,周边。周边是数据提供者,中心是数据接收/处理者。IOS设备可以很好的扮演这2个角色,利用现成的API就能开发出具有周边和中心功能的应用,我大Android就有点悲催了,自Android
4.3的系统就规定了BLE的API,但是仅限于中心,至于周边一直没有API的支持。直到2014.6.26 Android Lollipop的面世,才带来了周边API的支持(BluetoothLeAdvertiser)。

利用空闲时间看了看文档写了个一段关于BLE 周边的代码,当我兴冲冲的运行在Nexus5上面时,瞬间就crash了空指针异常,看了下源代码

<span style="font-size:18px;">/**
     * Returns a {@link BluetoothLeAdvertiser} object for Bluetooth LE Advertising operations, o<span style="white-space:pre">	</span>r
     * null if Bluetooth LE Advertising is not support on this device.
     * <p>
     * Use {@link #isMultipleAdvertisementSupported()} to check whether LE Advertising is suppor<span style="white-space:pre">	</span>ted
     * on this device before calling this method.
     */
    public BluetoothLeAdvertiser getBluetoothLeAdvertiser() {
        if (getState() != STATE_ON) {
            return null;
        }
        if (!isMultipleAdvertisementSupported()) {
            return null;
        }
        synchronized(mLock) {
            if (sBluetoothLeAdvertiser == null) {
                sBluetoothLeAdvertiser = new BluetoothLeAdvertiser(mManagerService);
            }
        }
        return sBluetoothLeAdvertiser;
    }
</span>

后来在官网上看了下,现在支持周边的设备只有Nexus6和Nexus9,虽然我很想入手Nexus6,但又不想转运和淘宝,无奈等吧.....说真的在中国开发Android真蛋疼~

最后贴下小代码,欢迎交流指导

<span style="font-size:18px;"> final BluetoothManager bluetoothManager =
                (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();

    BluetoothLeAdvertiser advertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();

    AdvertiseData data = new AdvertiseData.Builder()
            .addServiceUuid(ParcelUuid.fromString(ADVERTISER_SERVICE_UUID)).build();

    AdvertiseSettings settings = new AdvertiseSettings.Builder().setConnectable(true).build();

    advertiser.startAdvertising(settings , data, new AdvertiseCallback() {
         @Override
         public void onStartSuccess(AdvertiseSettings settingsInEffect) {
            super.onStartSuccess(settingsInEffect);
         }
        });</span>

转载请标明出处,多谢

时间: 2024-10-14 18:29:10

Android5.0 BLE 周边(BluetoothLeAdvertiser)的相关文章

android5.0(Lollipop) BLE Peripheral牛刀小试

转载请表明作者:http://blog.csdn.net/lansefeiyang08/article/details/46468743 知道Android L对蓝牙对了一些改进.包含加入A2dp sink.HFP client.BLE Peripheral功能等等. 我花了一天多时间对Android L BLE Peripheral SDK进行了研究,网上的资料非常少,有一个介绍的还不够清晰,所以就自己写了一个測试应用.希望能够对理解BLE Peripheral有一定的帮助. 此贴主要以解说代

android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser

android 从4.3系统开始可以连接BLE设备,这个大家都知道了.iOS是从7.0版本开始支持BLE. android 进入5.0时代时,开放了一个新功能,手机可以模拟设备发出BLE广播, 这个新功能其实是 对标于 iOS系统的手机模拟iBeacon设备. 先介绍一下BLE的广播, BLE设备之所以能被手机扫描到,是因为 BLE设备一直在每隔 一段时间广播一次,这个广播里面包含很多数据. 手机扫描BLE设备代码如下: public void startScan(){ bluetoothAda

Android5.0以上系统的移动网络开关

笔者近期遇到一个非常有意思的bug,贴出来和大家分享下. 那是一个温暖的早晨,阳光晒得人非常舒服.一封bug邮件像一片叶子飘到我的邮箱. 一番交流.笔者确认负责的Widget开关在Android5.0以上系统没有作用.相信非常多做过移动网络开关的朋友都知道.传统的方法是在ConnectivityManager中通过反射两个方法setMobileDataEnabled和getMobileDataEnabled来控制移动网络开和关的. /** * Gets the value of the sett

友情提醒:欲开发android5.0以上应用,请全部更新开发工具至最新

周末帮人完成一个项目,android5.0以上版本,谁知道被开发工具折腾的死去活来.我的开发环境是adt-bundle-windows-x86-20140702.zip版本,也是目前能找到的adt-bundle的最新版本.也升级至最新的adt和platform,但开发5.0的项目还是一堆错误: 错误1:动不动就报AndroidManifest.xml is missing的错误,为了解决这个问题每次都要将.android 和 开发空间里的.metadata,然后重启eclipse,真痛苦啊! 错

蓝牙4.0 BLE

读了N多文档,其中推荐的有: Webee的<蓝牙4.0是战演练> Ghostyu的 <BLE权威教程> 1:透穿实现: 利用TI的BLE包里的工程直接烧 上位设备用 central,下位设备用peripheral工程 做以下处理: central 的NPI初始化时添加uart CB,并在串口回调函数中 直接添加write char函数写进特征值(实现上位从串口接收并通过蓝牙发送), 使能特征值通知,并在通知处理事件中将数据从串口发送(实现上位的从蓝牙接受并从串口发送) periph

Android5.0之后的页面切换动画

Android5.0之后给我们开发者剩了好多的事情,为什么这么说呢?还记得刚开始的时候,Android里面的所有的动画都要我们开发者自己来写,现在不需要了,因为5.0之后自带了好多的动画,比如:按钮点击的动画.页面切换的动画(在android5.0之前想都不敢想的). 今天我着重讲一下页面之间的切换,目前5.0系统自带了三种动画方式:Explode(缩放).Fade(淡入淡出).Slide(滑动进入).下面就这三中方式进行介绍一下. 在讲解之前,现对于动画的方式进行介绍一下.通常,我们进行页面跳

Android5.0以上app进程保活的正确姿势

我的原文: http://blog.csdn.net/brycegao321/article/details/52312030 有图有真相,  亲测锤子T2.华为Mate8手机杀掉进程后能自启, 我设置的自启时间间隔为500ms(仅仅是为了测试).     首先要明确保活的概念: 1.非android核心进程(例如com.android.phone)都可以被干掉: 2.保活并不能真正的保证app进程不死,  而是能在被干掉后马上启动: Android系统按照进程的优先级分为: 1. 前台进程(F

ANDROID5.0触摸屏校准

1.校准原理: 1)首先生成校准用的参数,可以适用tslib生成校准参数,也可以使用校准app生成:使用校准app进行校准对使用者要求比较低,使用者可以不用学习复杂的命令:本文使用app方式 2)生成校准参数后,以后驱动每次接收到触摸事件就会使用校准参数进行校准 2.校准app 校准功能完全实现在在src目录里的MainActivity.java里,内容如下: package com.wss.calibrate2; import android.app.Activity;import andro

android5.0之toolBar

toolBar是android5.0之后提出的,可以简单的理解为ActionBar的升级版吧,在5.0之后,官方推荐使用ToolBar!下面开启ToolBar的正文(老样子,有问题请指正,有疑问,偶们共同讨论!嘎嘎......) ①toolBar是5.0之后提出的,那么低版本的该怎么办啊?老规矩咯,引入V7包'com.android.support:appcompat-v7:22.1.1',就是介个!(注意:下面的一些类都是V7包里的,不要写错了!!!) ②V7包引入之后,还是不可以直接使用to