当前位置: 首页 > 知识库问答 >
问题:

如何让Android应用检测到Eddystone信号?

裴和怡
2023-03-14

因为它是开源的,我想坚持它,以后相应地个性化(更新)。

例如,我们需要使用以下代码设置信标布局:

beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));

编辑:我更改了代码的setBeaconLayout部分,正如答案中所建议的那样。但还是不起作用。

 public void onCreate() {
    super.onCreate();
    BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
    beaconManager.getBeaconParsers().clear();
    beaconManager.getBeaconParsers().add(new BeaconParser().
    setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); //for Eddystone... 
    Log.d(TAG, "setting up background monitoring for beacons and power saving");
    Region region = new Region("backgroundRegion",null, null, null);
    regionBootstrap = new RegionBootstrap(this, region);
    backgroundPowerSaver = new BackgroundPowerSaver(this);
}

共有1个答案

童子明
2023-03-14

最近我在努力实现同样的目标,并在这里找到了一个解决方案。另外,您需要将信标置于Eddystone UUID模式来配置它。只需更改setBeaconLayout,我们就无法检测到不同的信标格式。您可以使用以下内容探索不同的信标格式:mbeaconmanager.getbeaconparsers().add(new BeaconParser().setbeaconlayout(BeaconParser.eddystone_uid_layout));

所以您的代码应该看起来像,

public class MyApplication extends Application implements BootstrapNotifier {
private static final String TAG = "MyApplication";
private RegionBootstrap regionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;
private BeaconManager mBeaconManager;

public void onCreate() {
    super.onCreate();
    mBeaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
    mBeaconManager.getBeaconParsers().clear();
     mBeaconManager.getBeaconParsers().add(new BeaconParser().
        setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
    Region region = new Region("my-beacon-region", null, null, null);

    regionBootstrap = new RegionBootstrap(this, region);

    backgroundPowerSaver = new BackgroundPowerSaver(this);
}

@Override
public void didEnterRegion(Region region) {

        Log.d("radbeacon", "Beacon detected in region");
}

@Override
public void didExitRegion(Region region) {

    Log.d("radbeacon", "Beacon out of region");
}

@Override
public void didDetermineStateForRegion(int i, Region region) {
      //Ignore
    }

}

另外,不要忘记将信标置于EddystoneUID模式,然后打开信标,这样应用程序就可以检测到它。

 类似资料:
  • 我有一个关于使用AltBeacon库用Eddystone信标监视多个区域的问题。 例如,假设我有3个信标,每个信标被分配给另一个区域,并且这些区域是基于信标的实例值定义的,即(“region1”,null,“instanceValueOfBeacon”,null)并且我对每个didenterregion有不同的操作。

  • 运行我的android应用程序时出现以下错误: 检测到屏幕覆盖: 要更改此权限设置,您首先必须从设置中关闭屏幕覆盖 我的应用程序没有列在显示的列表中。 如何解决这个错误?

  • 我能够在Android的Altbeacon库的Github站点上运行用于传输Altbeacon的示例。这在我的手机上工作得很好,我可以通过另一部手机发送一个Altbeacon并检测到它。 我需要开发一个POC,其中我可以传输Eddystone信标与Url数据。我对如何在使用Builder构建Beacon时设置Url数据有点困惑,Altbeacon library网站上的文档演示了Eddystone

  • 使用https://altbeacon.github.io/android-beacon-library/samples.html中的代码试图检测IBeacon发射器,该发射器是iOS8,如下http://blog.passkit.com/configure-iphone-ibeacon-transmiter/,在哪一步出错了,我需要在区域中使用BeaconIdentifier作为mymonito

  • null null null 在两个平台上使用相同的UUID,当从iOS传输iBeacon信号时,使用CLLocationManager委托方法在另一个iOS设备上检测到该信号 使用相同的UUID从使用Android Beacon库的Android传输iBeacon信号,IOS上的上述CLLocationManager委托方法不会检测到该Beacon。 为了增加检测的机会,我取消了iOS端对主值和

  • 我有一个布局,要求用户输入名称和日期。用于输入我使用的日期https://github.com/ErNaveen/MaterialDateTimePicker库,也可以使用OkHttpLibrary将数据发送到服务器。当我在输入两个数据后单击提交按钮时,我得到了以下错误。响应的作用域。。。 错误: