gpt4 book ai didi

android - 检测到 iBeacon 时在后台启动应用程序

转载 作者:行者123 更新时间:2023-11-29 00:17:50 27 4
gpt4 key购买 nike

我正在试验 Android Beacon 库,我能够让它用于监控和测距添加自定义解析器的 Apple 兼容信标(参见 Is this the correct layout to detect iBeacons with AltBeacon's Android Beacon Library?)

现在我正在尝试使用此处显示的示例代码编写一个在后台启动的应用程序:

http://altbeacon.github.io/android-beacon-library/samples.html

这是我的代码:

public class IBeaconBootstrap extends Application implements BootstrapNotifier {

private RegionBootstrap regionBootstrap;

@Override
public void onCreate() {

super.onCreate();

Log.d("IBeaconBootstrap", "App started up");

// wake up the app when any beacon is seen (you can specify specific id
// filers in the parameters below)

Region region = new Region("MyRegion", null, null, null);
regionBootstrap = new RegionBootstrap(this, region);
}

@Override
public void didDetermineStateForRegion(int state, Region region) {
// Don't care

// MonitorNotifier.INSIDE

Log.d("Boostrap didDetermineStateForRegion", "Region " + region.toString());
}

@Override
public void didEnterRegion(Region region) {

Log.d("Boostrap didEnterRegion", "Got a didEnterRegion call");

// This call to disable will make it so the activity below only gets
// launched the first time a beacon is seen (until the next time the app
// is launched)
// if you want the Activity to launch every single time beacons come
// into view, remove this call.
regionBootstrap.disable();

Intent intent = new Intent(this, MainActivity.class);
// IMPORTANT: in the AndroidManifest.xml definition of this activity,
// you must set android:launchMode="singleInstance" or you will get two
// instances
// created when a user launches the activity manually and it gets
// launched from here.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
}

@Override
public void didExitRegion(Region region) {

Log.d("Boostrap didExitRegion", "Got a didExitRegion call");
}
}

不幸的是,它不起作用。这些函数永远不会被调用:

  • public void didDetermineStateForRegion(int arg0, Region arg1)
  • public void didEnterRegion(区域 arg0)
  • public void didExitRegion(区域 arg0)

我预计至少会调用 didDetermineStateForRegion 创建 RegionBootstrap。

问题:

0) 我错过了什么?

1) 此功能是否也适用于 Apple 兼容的 iBeacons?

2) 我必须添加自定义解析器吗?在哪里/如何?

提前谢谢你。

更新 0:

按照 davidgyoung 的指示,我最终让它工作了,如下更改 onCreate 函数:

@Override
public void onCreate() {

Log.d("IBeaconBootstrap", "App started up");

// wake up the app when any beacon is seen (you can specify specific id
// filers in the parameters below)

Region region = new Region("MyRegion", null, null, null);
regionBootstrap = new RegionBootstrap(this, region);

BeaconManager.getInstanceForApplication(this).getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));

super.onCreate();
}

我还有两个问题:

0) 该应用程序每 3-5 分钟检查一次 iBeacon 是否存在,是否有任何方法可以静态或动态更改此间隔?

1) 显然,当应用程序检测到 iBeacon(如果它正在运行)时,它会进入前台,但如果应用程序未运行,则什么也不会发生。这是预期的行为还是应该在应用未运行时启动?

最佳答案

了解开箱即用,库仅适用于支持开放的信标 AltBeacon标准。为了将所有知识产权排除在开源库之外,这是必要的。如果您希望使库与专有信标一起使用,则必须在 onCreate 方法中添加一行以添加不同的 BeaconParser 实例。

BeaconManager.getInstanceForApplication().getBeaconParsers()
.add(new BeaconParser().setBeaconLayout("put-your-parser-expression-here"));

您需要将字符串“put-your-parser-expression-here”替换为能够检测您正在使用的专有信标的字符串。为了找到各种专有信标的解析器表达式,请尝试在 Google 上搜索“getBeaconParser”(在搜索中包含引号。)

关于android - 检测到 iBeacon 时在后台启动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com