我正在尝试在我的应用程序运行时检测到信标,并将它们放在列表中,还检测何时未运行并显示通知。我似乎无法在android上同时工作。
我的主要活动是...
[Activity(LaunchMode = LaunchMode.SingleInstance, Label = "MyApp", Icon = "@mipmap/icon", MainLauncher = true, Theme = "@style/MainTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, IMonitorNotifier, IRangeNotifier, IBeaconConsumer, IBootstrapNotifier
protected override void OnCreate(Bundle savedInstanceState)
{
set beacon parsers
beaconmanager.bind(this)
...
public void OnBeaconServiceConnect()
{
BeaconManager.AndroidBeaconManager.RemoveAllMonitorNotifiers();
BeaconManager.AndroidBeaconManager.RemoveAllRangeNotifiers();
BeaconManager.AndroidBeaconManager.AddMonitorNotifier(this);
BeaconManager.AndroidBeaconManager.AddRangeNotifier(this);
StartMonitoringBeacons...
StartRangingBeacons...
}
然后我有一个单独的课程...
[Activity(LaunchMode=LaunchMode.SingleInstance, Label="MyApp", MainLauncher = true)]
public class LaunchApplication : Application, IBootstrapNotifier, IRangeNotifier, IBeaconConsumer
{
private RegionBootstrap _bootstrap = null;
public override void OnCreate()
{
base.OnCreate();
var proximities = BeaconManager.Instance.GetServerProximitiesAsync().GetAwaiter().GetResult();
var regions = proximities.Select(x => new Region(x.UUID, null, null, null)).ToList();
BeaconManager.GetParsers().ForEach(x => BeaconManager.AndroidBeaconManager.BeaconParsers.Add(x));
_bootstrap = new RegionBootstrap(this, regions);
}
public void DidEnterRegion(Region region)
{
add parsers
beaconmanager.bind(this);
}
public void OnBeaconServiceConnect()
{
BeaconManager.AndroidBeaconManager.AddMonitorNotifier(this);
BeaconManager.AndroidBeaconManager.AddRangeNotifier(this);
start monitoring...
start ranging...
我不会在清单中添加任何内容,因为我相信它会自动添加Activity属性。
我的问题是我应该有一个MainActivity和一个独立的类,该类从Application派生(创建区域引导程序)吗?
我绑定到其他实例(bind(this))吗?
当我调试LaunchApplication OnCreate时,永远不会调用它,那么它将如何创建区域引导程序?
我应该如何设置它以便仅在前景和后台运行时进行检测?
谢谢。
答案 0 :(得分:1)
对于此特定问题,您无需在活动中调用bind()- RegionBootstrap已在内部完成它(只要您可以确认在自定义应用程序类中调用过onCreate)。
要使这两个地方都能正常工作,您只需要删除对bind()的调用,并删除删除活动中测距和监视区域的代码(如果删除所有监视器通知程序,则可以有效地禁用RegionBootstrap回调,因为您正在删除其通知程序)。只需将代码留在您的活动中,即可为该活动添加新的监视器和范围通知程序,并根据活动的需要开始进行范围和监视。
请注意,BeaconManager是单例。您对应用程序的所有组件(应用程序和活动类实例)都有一组范围和受监视区域。因此,您只需绑定一次(构造即可,并且您可以添加任意数量的通知程序。如果在一个类中删除通知程序,则也会从其他类中删除它们。
答案 1 :(得分:0)
这不能解决您的问题,但可以作为一个起点:
https://github.com/acaliaro/AltBeaconLibrarySample
这是@davidgyoung库的“ java绑定”
https://github.com/acaliaro/BeaconLibraryBindings
您还可以在这里找到一些内容:https://github.com/chrisriesgo/Android-AltBeacon-Library