天道酬勤,学无止境

Ibeacon android library 0.7.6 upgrade issue

问题

我使用的是 iBeacon 库版本 0.6,除了监控之外一切都很好。 在那个版本中,监控正在发生,但没有调用监控通知回调,因为库使用“隐式意图”来传递此信息。 请参阅问题 IBeacon 在 MonitorNotifier 回调时收到警告隐式意图不安全

最近我升级到了iBeacon android库的0.7.6版本,它解决了监控回调的问题,但我发现这次升级有一个新问题。 我收到一个异常,即 android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能触摸其视图。

我在测距通知器回调中调用我的应用程序的方法,如果我将它包装在 UI 线程中,则该异常不会出现,但它会减慢应用程序的性能。

这是代码

BackgroundRangingFragment.java

 @Override
 public void onIBeaconServiceConnect() {
   //Ranging Notifier
   iBeaconManager.setRangeNotifier(new RangeNotifier() {
      @Override 
      public void didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region) {
        //If beacon found in the specified Region.
        if (iBeacons.size() > 0) {
            MainActivity main = (MainActivity)MainActivity.mainActivityInstance;  
            main.setActiveBeaconsFromBackgroundRangingFragment(iBeacons);
        }
     }
 }

MainActivity.java

public void setActiveBeaconsFromBackgroundRangingFragment(List<Beacon> tempActiveBeaconArrayList){
    this.activeBeaconArrayList.clear();
    activeBeaconArrayList.addAll(tempActiveBeaconArrayList);
    MainRangingFragmennt fragment = (MainRangingFragmennt)getSupportFragmentManager().findFragmentByTag("beaconLogFragment");
    if(fragment != null){
        fragment.setActiveBeaconListForBeaconLogFromBackgroundRangingData(this.activeBeaconArrayList);
    }

MainRangingFragment.java

//Refreshes Beacon log 
public void setActiveBeaconListForBeaconLogFromBackgroundRangingData(List<Beacon> activeBeacons){
    //Here I am updating view with currently active beacons.
    LinearLayout progressBar = (LinearLayout)this.view.findViewById(R.id.beacon_log_list_progress);
        progressBar.setVisibility(View.VISIBLE);  //This line is raising exception .
        //code continues ...
}

异常消息。

04-22 18:10:15.546: E/isNull(1435): MainRangingFragmennt{421408c0 #2 id=0x7f0c0021 beaconLogFragment}
04-22 18:10:15.546: W/dalvikvm(1435): threadid=19: thread exiting with uncaught exception (group=0x4186fba8)
04-22 18:10:15.546: E/AndroidRuntime(1435): FATAL EXCEPTION: IntentService[IBeaconIntentProcessor]
04-22 18:10:15.546: E/AndroidRuntime(1435): Process: com.example.ranging, PID: 1435
04-22 18:10:15.546: E/AndroidRuntime(1435): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6094)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:824)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.support.v4.widget.DrawerLayout.requestLayout(DrawerLayout.java:762)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:352)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.requestLayout(View.java:16431)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.setFlags(View.java:8908)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.view.View.setVisibility(View.java:6036)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at com.example.ranging.MainRangingFragmennt.setActiveBeaconListForBeaconLogFromBackgroundRangingData(MainRangingFragmennt.java:309)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at com.example.ranging.MainActivity.setActiveBeaconsFromBackgroundRangingFragment(MainActivity.java:497)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at com.example.ranging.BackgroundRanging$4.didRangeBeaconsInRegion(BackgroundRanging.java:489)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at com.radiusnetworks.ibeacon.IBeaconIntentProcessor.onHandleIntent(IBeaconIntentProcessor.java:73)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.os.Handler.dispatchMessage(Handler.java:102)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.os.Looper.loop(Looper.java:136)
04-22 18:10:15.546: E/AndroidRuntime(1435):     at android.os.HandlerThread.run(HandlerThread.java:61)

我正在使用片段在 UI 中加载信标数据。

回答1

当接收来自 AndroidIBeaconLibrary 的异步调用时,您必须将任何更新用户界面的代码包装在如下块中:

    runOnUiThread(new Runnable() {
        public void run() {
           ...
        }
     }

这是构建 Android 应用程序的一般规则,并不是从 0.6 到 0.7.6 版本的 Android iBeacon 库的具体更改。 有时线程处理是不确定的,所以这在 0.6 版本中很可能发生在大部分时间或所有时间。 事实仍然是,您需要确保此处理在 UI 线程上运行。 它不应该影响性能。

我认为为什么你看到“延迟”和一些信标“被忽略”的最可能的解释是因为setActiveBeaconListForBeaconLogFromBackgroundRangingData方法的设计方式。 您必须编写它以考虑到您不会在每次回调时获得所有可见信标的完整列表这一事实。 您必须在 UI 中维护一个单独的列表,并合并任何新可见的 iBeacon 传递给此方法。 同样,您必须以编程方式从该列表中删除任何未报告在几秒钟内可见的 iBeacons。

同样,这并不是库版本之间特别改变的东西,但我不怀疑细微的时间差异可能会使升级后问题更加严重。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Ibeacon android library 0.7.6 upgrade issue
    I was using iBeacon library version 0.6 and everything was fine except monitoring. In that version monitoring was happening but the monitoring notifier callback was not getting called because library used an "implicit intent" to pass this information. see Issue IBeacon getting warning Implcit intents are not safe on callback of MonitorNotifier Recently I upgraded to the version 0.7.6 of the iBeacon android library and it solved the problem of monitoring callback but I found a new issue with this upgrade. I am getting an Exception which is android.view.ViewRootImpl
  • IBeacon 在 MonitorNotifier 回调时收到警告隐含意图不安全(IBeacon getting warning Implcit intents are not safe on callback of MonitorNotifier)
    问题 我正在使用 Android 4.4 并在找到具有指定区域的信标时在 Monitoring 的回调中收到警告消息。 我用于监控的代码是 @Override public void onIBeaconServiceConnect() { iBeaconManager.setMonitorNotifier(new MonitorNotifier() { @Override public void didEnterRegion(Region region) { Log.e("didEnterRegion","I just saw an iBeacon for the first time!"); } @Override public void didExitRegion(Region region) { Log.e("didExitRegion","I no longer see an iBeacon"); } @Override public void didDetermineStateForRegion(int state, Region region) { Log.e("didDetermineStateForRegion","I have just switched from seeing/not seeing iBeacons: "+state); if(state ==
  • Android 和 iOS 如何在没有电池问题的情况下扫描蓝牙信标?(How do Android and iOS scan for Bluetooth beacons without battery issues?)
    问题
  • Radius Networks的ibeacon测距波动(Radius Networks' ibeacon ranging fluctuation)
    问题 我是iBeacon的新手,但是我花了整整一天的时间尝试获取信息和iBeacon可以正常工作的Android应用程序。 我偶然发现了Android iBeacon库示例,并尝试了一下。 我使用了最新的aar文件(0.7.3),基本上将示例复制/粘贴到了新项目中。 我使用带AirLocate的iPad创建了一个信标(从Dev Center的Apple代码中编译),然后启动代码。 我的问题是范围一直在波动,没有逻辑。 例如,将手机(在这种情况下为Nexus 5,原始rom,未做任何修改)放置在距iPad半米的地方,可以采取以下措施: 0.01m 0.03百万 0.07百万 0.48百万 0.01m 0.02m 等等。 当我在其上使用带有AirLocate的另一台iPad时,它提供了一种更稳定,更逼真的测量方法。 将信标排除为问题的根源。 我使用Nexus 7 2013(原始rom,未修改)进行了测试,但遇到了同样的问题。 我已阅读过wifi可能会导致问题,所以我禁用了它,但它仍然是一样的。 我在Play商店上的Radius Networks应用程序也遇到了同样的问题:iBeacon定位 我想知道是否有人对这个库有问题? 有什么办法可以解决这个问题? 您知道我可以使用的另一个不会引起此类问题的库吗? 任何帮助,感激不尽。 先感谢您。 回答1
  • Radius Networks' ibeacon ranging fluctuation
    I'm fairly new to iBeacon but I have spent the day trying to get informations and a working Android application with iBeacon. I have stumbled upon Android iBeacon Library samples and gave it a try. I used the latest aar file (0.7.3) and basically copy/paste their examples in a new project. I have created a beacon using an iPad with AirLocate (compiled from Apple's code from the Dev Center) and launch the code. My problem is the range fluctuating all the time with no logic. For example, the phone (in this case a Nexus 5, original rom, no modification) placed half a meter away from the iPad
  • onIBeaconServiceConnect() 在 android 中没有被调用(onIBeaconServiceConnect() is not getting called in android)
    问题 我正在使用由radiusnetworks 发布的AndroidIbeacon 库,我能够成功运行他们的演示应用程序。 但是当我将它添加到我的应用程序时,onIBeaconServiceConnect() 方法没有被调用。 在我的代码下面, public class Sample extends Activity implements IBeaconConsumer { protected static final String TAG = "Sample"; private IBeaconManager iBeaconManager = IBeaconManager .getInstanceForApplication(this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); iBeaconManager.bind(this); } @Override protected void onDestroy() { super.onDestroy(); iBeaconManager.unBind(this); } @Override public void
  • 如何在不使用任何库的情况下检测 android 中的 IBeacon(How to detect IBeacon in android without using any library)
    问题 我是 Ibeacon 的新手,我想知道我们是否可以在不使用任何 SDKLibrary 或库的情况下检测 android 中的 Ibeacon 任何人都可以给出示例。 我知道一些图书馆,如 Radius Networks。 但我不想使用任何图书馆 回答1 Android 操作系统没有任何检测 iBeacon 的代码,但它有允许您扫描低功耗蓝牙设备的代码,这些设备是比 iBeacon 更低级别的设备。 您可以使用此蓝牙 LE 扫描滚动检测 iBeacon 的自己的代码。 这正是 Radius Networks 的 Android iBeacon 库所做的。 它是开源的,因此如果您不想使用该库,您可以简单地从库中复制代码块并进行自己的检测。 源代码在这里: https : //github.com/RadiusNetworks/android-ibeacon-service 编辑:该库已移至 http://github.com/AltBeacon/android-beacon-library 如果您的检测用例非常简单,这可能会正常工作。 但是,请注意不要过多地工作,因为处理所有边缘情况会变得越来越复杂。 这当然是我在编写库时学到的东西。 如果你只是想玩这个,我会专注于库中的一个类:IBeacon.java 这个类可以将Android蓝牙LE扫描记录转换为IBeacon
  • 安卓 8.0 上的 BLE 扫描(BLE Scan on android 8.0)
    问题 我开发了一个应用程序,可以对附近的设备(周围有多种信标)进行 ble 扫描。 我正在使用带有 CALLBACK_TYPE_ALL_MATCHES 和空 ScanFilter 数组的 BluetoothLeScanner 进行扫描(因为我想获得附近所有设备的回调)。 我的应用程序在我的 OnePlus 5 设备 Android 7.x(和少数其他设备)上运行良好 - 直到我在我的设备上升级到 android 8.0 OTA。 我不确定是 Android 8.0 问题还是 OnePlus Oxygen 错误,但我面临以下情况:我周围有很多种信标,一些宣传标准的 ibeacon/eddystone 数据包,而另一些宣传自定义数据包。 我只收到标准 ibeacon/eddystone 数据包的回调 (onScanResult),而不是自定义数据包。 在升级之前,我收到了各种数据包的回调——标准和非标准。 在 android 8.0 中接收到的 ble 数据包的下划线过滤器中是否有什么变化? 这是最新 Oxygen OS 版本中的错误吗? 我应该添加某种标志来获取非标准数据包吗? 任何想法将不胜感激。 谢谢。 回答1 在调查了每个信标发送的数据包后,我发现其中一个自定义信标发送了一个数据长度字节错误的数据包。 这导致数据包被 OS 8(Android 或 Oxygen)过滤掉 -
  • BLE Scan on android 8.0
    I've developed an app that do ble scan for nearby devices (multiple kinds of beacons around). I am scanning using the BluetoothLeScanner with CALLBACK_TYPE_ALL_MATCHES and an empty ScanFilter array (since I want to get callbacks for all nearby devices). My app was working just fine on my OnePlus 5 device Android 7.x (and few other devices) - until I have upgraded to android 8.0 OTA on my device. I am not sure if it is Android 8.0 issue or OnePlus Oxygen bug but I face to following situation: Around me there are many kinds of beacons, some advertise standard ibeacon/eddystone packets and others
  • 检查蓝牙低功耗信标是否在 Android 附近(Check if Bluetooth Low Energy Beacons are nearby in Android)
    问题 背景 我想编写一个 android 应用程序,它可以检测我是否进入或离开一个区域。 每个区域(比如一座建筑物)都有一个处于广告模式的 BLE 信标。 我确实知道信标的 mac 地址。 该应用程序应在后台运行,并应节能。 立即识别该区域并不重要,但 5 分钟的窗口就足够了。 在 http://developer.android.com/guide/topics/connectivity/bluetooth-le.html 上说你不应该“循环扫描”,但有没有其他方法来实现区域进入/离开事件? 我也对 UUID、服务和连接有点困惑。 它是正确的,这些问题不相关的我的问题? 据我从蓝牙规范中了解到,信标只能处理一个连接。 因此,如果我只对附近的信标感兴趣,我的应用程序实际上不应该连接到任何信标,因为连接将停止信标做广告,因此其他设备将不再看到它。 这样对吗? 相关问题 我想知道的似乎是一个常见的问题: 在 Android 上为低功耗蓝牙创建后台服务 Android 和 iOS 如何在没有电池问题的情况下扫描蓝牙信标? 蓝牙低功耗 Android - 在后台搜索 但大多数答案都与我不想使用的“Android iBeacon 库”有关。 回答1 即使您不确定要使用 Android iBeacon 库,查看其源代码并从中复制想法和/或代码片段可能是个好主意
  • 这是使用AltBeacon的Android Beacon库检测iBeacon的正确布局吗?(Is this the correct layout to detect iBeacons with AltBeacon's Android Beacon Library?)
    问题 我已经使用以下信标布局成功修改了Android Beacon库的参考实现应用程序,以便它可以检测到我手边的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); } } 作为BLE数据包内部的新手,我不确定这是否是正确的布局。 该库支持AltBeacon标准,并且其文档未提及如何检测iBeacon设备。 此代码会检测所有iBeacon设备吗? 即m:前缀是否过于严格?还是与iBeacon规范匹配的正确字节序列? 同样,其余布局是否与iBeacon规范完全匹配? 参考:
  • Android设备可以充当iBeacon吗?(Can an Android device act as an iBeacon?)
    问题 Android设备可以充当iBeacon并确定其他Android设备何时进入其范围吗? 这些其他Android设备是否需要打开蓝牙? 如果客户进入我的商店,但他的设备上未安装我的应用程序,那么iBeacon可以工作,还是必须先安装该应用程序? 每天都有如此多的客户来我们的商店逛逛,但是如果他们没有安装我的应用程序,那么iBeacon概念行得通吗? 回答1 是是在Android 5+上是可能的,并且您可以在Android Beacon库中找到用作信标传输的开源代码。 Google Play商店的Beacon Scope应用程序中还有一个功能齐全的信标发射器版本。 这是一个使用Android Beacon库传输iBeacon的示例: Beacon beacon = new Beacon.Builder() .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6") .setId2("1") .setId3("2") .setManufacturer(0x004c) .setTxPower(-59) .build(); BeaconParser beaconParser = new BeaconParser() .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")
  • 结合 iBeacon 蓝牙低功耗与 Android 4.3(Combine iBeacon bluetooth low energy with Android 4.3)
    问题 我正在寻找一种从 Android 设备检测 iBeacon(iOS 7.0 功能)的方法。 我阅读了 Android 文档,其中 iBeacon 似乎是某种发送其位置的 GATT 服务器。 虽然 Android 文档说我不应该轮询这些数据,但对于检测来说,这将是必要的。 我用谷歌搜索了很多,但这个话题很新(我什至创建了一个新标签 ibeacon),所以如果我能从 iOS 世界获得一些描述实现的资源链接,我会很高兴。 另外,如果有一些我还没有找到的 Android 库会很好。 回答1 编辑:下面的库已移至此处: https://github.com/AltBeacon/android-beacon-library 我已将 iOS7 iBeacon SDK 移植到 Android,并且能够查看标准 iBeacon 并估计它们的范围。 该代码可在此处获得: https://github.com/RadiusNetworks/android-ibeacon-service 为此,您需要引入低功耗蓝牙 API 的 Android 4.3。 您还需要具有低功耗蓝牙芯片组的设备。 如果您不想使用上面的完整库,您可以推出自己的库。 iBeacons 每秒简单地传输一次 BLE 广告,该广告以已知的字节序列开始。 您只需告诉 Android 进行一次 BLE 扫描,获取每个广告,然后查找以已知
  • 如何让 AltBeacon 库的 BootstrapRegion 识别 iBeacon 布局?(How to get the AltBeacon library's BootstrapRegion to recognize the iBeacon layout?)
    问题 我正在使用参考,http://altbeacon.github.io/android-beacon-library/samples.html。 我还使用了如何使用 AltBeacon android-beacon-library 检测多个信标的区域进入/退出? 我正在尝试使用 AltBeacon 的 Android-Beacon-Library 在后台检测 iBeacons。 我在我的项目中包含了以下代码片段。 到目前为止,我没有在后台检测到 ibeacons...任何帮助表示赞赏 我正在使用 BeaconManager setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 但是,我没有收到错误,也没有检测到信标。 在三星 Galaxy 4 设备上调试运行应用程序时,应用程序启动但未检测到活动信标。 我的信标是配置为 iBeacon 的 Rad 信标。 Rad Beacon 应用程序检测到它们,我的其他在前台运行并检测我的 iBeacon 的 AltBeacon 库应用程序也是如此。 这些应用程序在三星 Galaxy 4 上运行。 我为后台信标检测设置的应用程序...没有检测到 iBeacons。 这是我的代码。 对 Constants.java 的引用只是我的应用程序的常量文件。 package com
  • How to detect IBeacon in android without using any library
    i am new to Ibeacon and i want to know can we detect Ibeacon in android without using any SDKLibrary or library can any one give sample example. i know some library like Radius Networks. but i don't want to use any library
  • kontakt.io 信标的问题(Problems with kontakt.io Beacons)
    问题 我们刚收到 10 件。 来自 kontakt.io(波兰)的一组信标。 不知何故,它们似乎无法正常工作,或者我们没有恢复它们应该如何正确操作。 在我们将它们踢开之前,谁能告诉我这种行为是否是 Beacons (iOS) 的常见行为? 我们确实会收到持续范围的通知,但这些通知不包含范围内的信标,既不在我们自己的测试应用程序中,也不在 Apple 的 AirLocate 示例或官方 kontakt.io 应用程序中。 我们总是需要关闭和打开蓝牙才能看到任何东西,然后,AirLocate 显示了一些,但信息不足(接近度总是“未知”),我们自己的测试应用程序只接收到一个而不是全部 10 个信标的信息,尽管它们在里面范围,并且 kontakt.io 应用程序不显示或触发 antyhing。 当我们能够在 AirLocate 示例中看到范围内的信标时,列表会自行填充(在切换蓝牙状态后),但会在几秒钟内丢失所有信标。 这是一个错误的配置,因此是我们的错,我们是否获得了损坏的信标,或者这是常见的行为......? 任何帮助表示赞赏。 谢谢! 回答1 总是显示为“未知”的接近度通常表明未在信标上正确设置发射机功率校准值。 您需要确定 kontact.io 信标是否允许您设置此值,该值应该与每个 iBeacon 广告一起发送。 如果您有设置方法,则首先运行校准,这可以通过 AirLocate
  • 以编程方式,如何识别信标是属于 Eddystone 还是 iBeacon?(Programmatically, How to identify if a beacon belongs to Eddystone or iBeacon?)
    问题 我创建了一个 android 应用程序来使用蓝牙 LEscanner 扫描 BLE。 现在我需要我的应用程序来识别信标是属于 iBeacon 还是 Eddystone。 到目前为止,我通过解析 AD 帧成功地确定了 ibeacon 的 UUID、MajorId、MinorId。 回答1 如果您知道所有字段的字节偏移量,则读取广告的字节相对容易。 下面的两个代码片段向您展示了如何解析这些代码。 第一个展示了如何使用 Android Beacon 库在您自己的onLeScan回调中执行此操作,第二个展示您如何从头开始滚动您自己的回调。 要解释布局如何工作,请查看下面的代码。 它使用 Android Beacon BeaconParser的BeaconParser类,该类处理可配置布局的所有解析。 (即使你想像第二个代码片段中展示的那样滚动你自己的,看看布局表达式也是值得的,这样你就知道它们是如何工作的。下面的表达式显示了与 iBeacon 非常相似的 AltBeacon 的详细信息。显示了 AltBeacon因为在讨论其实现时没有知识产权限制。AltBeacon 和 Eddystone 都是开源标准。) 第一个布局表达式显示 AltBeacon(再次与 iBeacon 非常相似)具有三个标识符(“i”表达式)。 第一个(在 iBeacon 中称为 UUID)是 16 个字节
  • Is this the correct layout to detect iBeacons with AltBeacon's Android Beacon Library?
    I have successfully modified the reference implementation app of the Android Beacon Library using the following beacon layout, so that it detects an iBeacon device that I have at hand: 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); } } Being new to the internals of BLE
  • 在 Android 中,如何在仅使用邻近 UUID 创建区域时获取有关 ExitedRegion 的 ibeacon 详细信息(In Android, How to get ibeacon details onExitedRegion when Region is created with proximity UUID only)
    问题 我正在使用 Estimote 信标开发 android 应用程序。 我正在尝试处理我将使用 100 多个信标的场景。 为此,我不是为每个信标创建单独的区域,而是通过为所有信标分配公共 Proximity UUID 并仅通过传递 Proximity UUID 来声明区域来创建单个区域。 我保留 Major 和 Minor 以唯一标识信标。 由于我的应用程序是在后台,我使用与onEnteredRegion和onExitedRegion回调(我的理解是一应俱全应用程序处于前景只能做)BeaconManager.MonitoringListener接口。 由于 onExitedRegion 没有为我提供任何触发 onExitedRegion 的信标列表,我如何获得信标详细信息,例如 onExitedRegion 中的 Major、Minor? 回答1 编辑:下面提到的库已被 Android Beacon 库取代。 代码示例可在同一站点上获得。 你没有说你使用的是什么库,但是开源的 Android iBeacon 库允许你通过结合测距和监控来做到这一点。 该库对在后台使用测距没有限制(与 iOS 不同)。 该库与任何标准 iBeacon 完全兼容。 尽管库的 didExitRegion 回调没有告诉您消失的特定信标,但您可以根据最近的 didRangeBeaconsInRegion
  • 是否可以使用标准的 iOS 库来发现 Gimbal 信标(Is it possible to discover Gimbal beacons with standard iOS libraries)
    问题 我正在尝试使用标准的 iOS 库来确定“发现”万向节信标。 根据 Radius Networks 和 Blue Sense Networks - Gimbal 信标不广播标准的 iBeacon 格式协议,因此如果不使用 Gimbal iOS SDK,就无法发现。 “另一方面,万向节信标广播滚动加密代码,以确保只有具有正确权限的用户才能看到信标的信息。基本上这意味着,万向节信标每次发出信号时,它包含不同的数据。此外,任何支持 BLE 的智能手机可以看到 Gimbal 信标广告,但由于它们在每次广播中都会发生变化,这意味着智能手机将多次检测相同的物理信标,并将每次检测视为不同的设备。因此,为了正确使用 Gimbal 信标,开发人员没有其他方法选择,而是通过他们的专有 SDK 来完成。” - 蓝感网络 我看到了一些关于访问这些信标的相互矛盾的陈述,但我还没有看到任何具体的例子。 是否可以? 有吗? 回答1 您可以使万向节信标像 iBeacon 一样被发现。 @jamesfrost 在他的评论中给出了答案。 看看这篇文章 https://stackoverflow.com/a/22666967/1496517 我刚刚做到了,它就像一个魅力。 我无法使用 estimote 演示应用程序看到它们,但是我使用了 Radius Networks 演示应用程序。