我已成功修改了参考实现应用程序的的Android的信标库使用以下信标布局,使得它检测到我手边的iBeacon显示设备:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
}
}
Run Code Online (Sandbox Code Playgroud)
作为BLE数据包内部的新手,我不确定这是否是正确的布局.该库赞同AltBeacon标准,其文档未提及如何检测iBeacon设备.
m:
前缀是否过于严格,或者是与iBeacon规范匹配的正确字节序列?参考:
我正在寻找一种从Android设备检测iBeacon(iOS 7.0功能)的方法.我阅读了Android文档,其中似乎iBeacon是某种GATT服务器,它发送它的位置.虽然Android文档说我不应该轮询该数据,但是对于检测,这将是必要的.
我谷歌很多,但这个话题很新(我甚至创建了一个新标签ibeacon)所以如果我从iOS世界获得一些描述实现的资源链接,我会很高兴.此外,如果有一些Android库,我还没有找到它会很好.
将我的Nexus 5闪存到Android 5.0预览版本hammerhead-lpx13d后,操作系统报告它不再支持蓝牙LE广告.如果你打电话:
((BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE))
.getAdapter().getBluetoothLeAdvertiser()
Run Code Online (Sandbox Code Playgroud)
始终返回null.另外,新方法:
((BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE))
.getAdapter().isMultipleAdvertisementSupported()
Run Code Online (Sandbox Code Playgroud)
总是返回false
第一种用于在6月份返回Nexus 5的第一个Android L预览版本上的有效对象的方法.闪烁最新更新后,它不再这样做了.
有人看到了吗?
编辑:至少有一个人在此处复制了此问题,他在此处向Google提出了一个问题:https://code.google.com/p/android-developer-preview/issues/detail?id = 1570
精简版:
在我使用Android 5.0 Lollipop的测试中,我注意到android.bluetooth.le.BluetoothLeScanner
检测BLE设备的频率低于Android 4.4 KitKat.为什么这样,还有其他选择吗?
长版:
我正在开发一款Android应用程序,专门用于Nexus 7平板电脑,专注于检测蓝牙低功耗(BLE)设备.该应用程序主要感兴趣的是信标的RSSI值,以确定它们与平板电脑的接近程度.这意味着我不需要连接到BLE设备,因为在检测到设备时RSSI值会传递给扫描回调.
在Android 4.4 KitKat中,当我调用时BluetoothAdapter.startLeScan(LeScanCallback)
,对于每个检测到的BLE设备,我的回调仅被调用ONCE.(我已经看到一些讨论声称每个设备的行为可能不同)但是,我对不断变化的RSSI值感兴趣,所以目前推荐的方法是以设定的间隔(在我的情况下为250ms)连续执行startLeScan和stopLeScan:
public class TheOldWay {
private static final int SCAN_INTERVAL_MS = 250;
private Handler scanHandler = new Handler();
private boolean isScanning = false;
public void beginScanning() {
scanHandler.post(scanRunnable);
}
private Runnable scanRunnable = new Runnable() {
@Override
public void run() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (isScanning) {
adapter.stopLeScan(leScanCallback);
} else if (!adapter.startLeScan(leScanCallback)) {
// an error occurred during startLeScan
}
isScanning = …
Run Code Online (Sandbox Code Playgroud) rssi bluetooth-lowenergy ibeacon-android android-ibeacon android-5.0-lollipop
Android 4.3中添加了蓝牙LE,但似乎没有后台扫描模式,一旦注册通过附近的可用BLE UUID进行通知,它就会唤醒应用程序.
这似乎可以通过iOS7和iBeacons API实现.有没有人知道Android 4.3中是否有这样的功能,或者是否有针对BLE设备进行周期性扫描BLE环境的良好解决方法?
http://developer.android.com/guide/topics/connectivity/bluetooth-le.html
Android 5引入了BLE MAC地址轮换以增加隐私.每次调用BluetoothLeAdvertiser.startAdvertising()时,MAC地址都会更改.
是否可以禁用地址旋转,并在BluetoothLeAdvertiser的整个生命周期内使用相同的MAC地址?
bluetooth bluetooth-lowenergy ibeacon-android android-5.0-lollipop
我最近开始测试Estimote Beacons,我正在尝试在进入信标区域时从后台服务发出通知,但不幸的是我的解决方案不起作用.它不会出错,但在发现信标时不会启动通知.我不知道它是否是一些代码错误或只是这样做的方式是错误的.我已经阅读了这个其他问题,但它看起来有点不同,因为我使用的是服务而不是活动,但也许答案是类似的(应用程序上下文相关)...
这是我的服务代码
public class BeaconsMonitoringService extends Service{
private BeaconManager beaconManager;
private String user;
@Override
public void onCreate() {
// Configure BeaconManager.
beaconManager = new BeaconManager(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Beacons monitoring service starting", Toast.LENGTH_SHORT).show();
user = intent.getStringExtra("user");
// Check if device supports Bluetooth Low Energy.
if (!beaconManager.hasBluetooth()||!beaconManager.isBluetoothEnabled()) {
Toast.makeText(this, "Device does not have Bluetooth Low Energy or it is not enabled", Toast.LENGTH_LONG).show();
this.stopSelf();
}
connectToService();
// If we get …
Run Code Online (Sandbox Code Playgroud) 我是Ibeacon的新手,我想知道我们可以在不使用任何SDKLibrary或库的情况下检测到android中的Ibeacon,任何人都可以提供示例示例.
我知道像Radius Networks这样的图书馆.但我不想使用任何图书馆
昨天我在Nexus 4上获得了Android 5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.
即使Radius Networks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,而且通常看起来好像信标超出了范围.
我注意到的一点是,现在在logcat中出现以下行"BluetoothLeScanner:找不到回调包装器".我继续寻找那个类,看到它是用Android L引入的,但我不知道这是否与它有关.
重要的是,在更新之前,我一直在使用Locate应用程序和参考应用程序,没有任何麻烦.
我不知道这是否是一个普遍的问题,但如果它发生在我身上,我相信它可能发生在其他人身上,所以任何帮助都会真的很受欢迎.
提前致谢!
更新:
在让图书馆工作失败后,我决定尝试图书馆的Android L分支.我做的是我将新库插入参考应用程序,但也没有按预期工作.
通过在设备进入新区域时通知,Monitor Activity似乎正常工作.但是,测距活动不报告任何信标,虽然已经调用了ofRangeBeaconsInRegion,但总是报告零信标.奇怪的是,当活动暂停时(暂时切换到另一个应用程序),logcat显示现在使用实际信标调用了didRangeBeaconsInRegion.
我现在有点卡住,因为我不知道如何让任何图书馆在Android L上工作,所以再次,任何帮助都会非常感激.
bluetooth-lowenergy ibeacon-android altbeacon android-5.0-lollipop
我试图了解txPower究竟是什么以及如何使用它,因为我计划开发使用Beacons的Android应用程序.
我在网上看到了2个定义:
1.信标的发射功率.
2.接收功率距离信标1米.
这两个定义有何关联?此外,当使用诸如QuickBeacon之类的应用程序从设备发送信标信号时,如何确定将功率(txPower)设置为?
android bluetooth-lowenergy ibeacon ibeacon-android altbeacon