2

如 Android L 中的 API 参考中所述,可在此处获得:https ://developer.android.com/preview/reference.html

使用蓝牙低功耗在 Android L 中启动广告数据的方法有两种:

  1. public void startAdvertising(AdvertiseSettings 设置、AdvertiseData 广告数据、AdvertiseCallback 回调)

  2. public void startAdvertising(AdvertiseSettings 设置、AdvertiseData AdvertisementData、AdvertiseData scanResponse、AdvertiseCallback 回调)

第二种方法包含另外一个参数:scanResponse

当我使用第一种方法时,一切正常,我可以扫描广告数据中设置的信息。但是,当我测试第二种方法时,我只能扫描并获取scanResponse中的数据,并且从LogCat中,我得到了以下错误: 在此处输入图像描述

在此处输入图像描述

这似乎是一个蓝牙缓冲区问题,在我的(广告)回调对象中,我记录了一句话:

advertiseCallback = new AdvertiseCallback() {
            @Override
            public void onSuccess(AdvertiseSettings advertiseSettings) {

                Log.i(TAG, "Adv Success");
                // Other operations
            }

            @Override
            public void onFailure(int i) {
                // Other operations
            }
        };

从 LogCat 可以看出 onSuccess() 方法被调用了两次,我认为可能是以下两个原因之一: 1. 广告数据和 scanResponse 数据,而广告数据可能导致蓝牙问题,因此可能不被广播;2、advertiseData在启动(成功)(可能)后关闭(成功);

我是否以错误的方式使用了这种方法?我使用的是带有 Android L Preview 版本的 Nexus 5,还是当前 Android 系统的错误?

参考

方法:public void startAdvertising(AdvertiseSettings 设置、AdvertiseData AdvertisementData、AdvertiseData scanResponse、AdvertiseCallback 回调)

启动蓝牙 LE 广告。操作成功后会广播advertiseData。scanResponse 将在扫描设备发送主动扫描请求时返回。方法立即返回,操作状态通过回调传递。

需要 BLUETOOTH_ADMIN

参数

设置 用于蓝牙 LE 广告的设置。

advertiseData 广告数据包中要发布的广告数据。

scanResponse 与广告数据关联的扫描响应。

callback 广告状态回调。

4

0 回答 0