Как обнаружить маяки с помощью Android Beacon Library на переднем и заднем плане? - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь обнаружить маяки во время работы моего приложения, поместить их в список, а также определить, когда они не работают, и отобразить уведомление. Кажется, я не могу заставить обоих работать одновременно на 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 и отдельный класс, производный отПриложение (которое создает загрузочную область региона)?

связывать ли я с различными экземплярами (связывать (это))?

Когда я отлаживаю, LaunchApplication OnCreate никогда не вызывается, так как он вообще создаетрегион начальной загрузки?

как мне настроить его так, чтобы он обнаруживался при работе на переднем и заднем плане?

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Для этой конкретной проблемы вам не нужно вызывать bind () в действии - это уже было выполнено изнутри RegionBootstrap (при условии, что вы можете подтвердить, что onCreate вызывается в пользовательском классе приложения).

Чтобы заставить эту работу работать в обоих местах, вам просто нужно убрать вызов bind () и удалить код, который удаляет области ранжирования и мониторинга в деятельности (если вы удалите все уведомления монитора, вы фактически отключитеОбратные вызовы RegionBootstrap, потому что вы удаляете его уведомитель). Просто оставьте код в своей деятельности, который добавляет новые мониторы и уведомления о дальности для этой операции, и начинайте ранжирование и мониторинг, как требуется для этой деятельности.

Имейте в виду, что BeaconManager является одиночным. У вас есть один набор областей ранжирования и мониторинга для всех компонентов вашего приложения (как приложения, так и экземпляра класса активности). Из-за этого вам нужно только связать один раз (создание, и вы можете добавить столько уведомителей, сколько захотите. Если вы удалите уведомители в одном классе, он удалит их и из других классов.

0 голосов
/ 24 октября 2019

Это не ответ на вашу проблему, но может быть отправной точкой:

https://github.com/acaliaro/AltBeaconLibrarySample

это "привязка Java" к библиотеке @davidgyoung

https://github.com/acaliaro/BeaconLibraryBindings

Вы также можете найти что-то здесь: https://github.com/chrisriesgo/Android-AltBeacon-Library

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...