如Android L中的API参考中所述,可在此处获取:https://developer.android.com/preview/reference.html
有两种方法可以使用蓝牙低功耗在Android L中开始宣传数据:
public void startAdvertising(AdvertiseSettings settings,AdvertisementData advertiseData,AdvertiseCallback callback)
- 醇>
public void startAdvertising(AdvertiseSettings settings,AdvertisementData advertiseData,AdvertisementData scanResponse,AdvertiseCallback callback)
第二种方法还包含一个参数:scanResponse
当我使用第一种方法时,一切正常,我可以扫描advertiseData中设置的信息。但是,当我测试第二种方法时,我只能扫描并获取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. advertiseData和scanResponse数据,而advertiseData可能导致蓝牙问题,因此无法广播; 2. advertiseData在启动(成功)之后关闭(成功)(可能);
我是否以错误的方式使用此方法?我使用的是Nexus 5和Android L预览版,还是当前Android系统的bug?
参考:
方法:public void startAdvertising(AdvertiseSettings settings,AdvertisementData advertiseData,AdvertisementData scanResponse,AdvertiseCallback callback)
启动蓝牙LE广告。在操作成功后,广播数据将被广播。 扫描设备发送活动扫描请求时将返回scanResponse 。方法立即返回,操作状态通过回调传递。
需要BLUETOOTH_ADMIN
参数
设置蓝牙LE广告的设置。
advertiseData要在广告包中公布的广告数据。
scanResponse扫描与广告数据相关的响应。
回调广告状态回调。