Как получить UUID при мониторинге маяков? - PullRequest
0 голосов
/ 28 сентября 2018

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

@Override
 public void didEnterRegion(Region arg0) {
    // In this example, this class sends a notification to the user 
 whenever a Beacon
    // matching a Region (defined above) are first seen.
    System.out.println(arg0);
    System.out.println(arg0.getUniqueId());
    System.out.println(arg0.getId1());
    Log.d(TAG, "did enter region.");
}

Как мне получить UUID здесь?Нужно ли вызывать ранжирование здесь, потому что я пытаюсь создать сервис переднего плана, и если я вызываю сервис ранжирования каждый раз, когда получаю событие didEnter, оно не будет тяжелым и будет убито системой Android.Ранее я пытался сделать это и сохранить результаты в коллекции и посмотреть, появится ли новый маяк в регионе, а затем добавить его туда, но в результате служба была убита.

Редактировать: Iпробовал следующее

 @Override
  public void didEnterRegion(Region arg0) {
    if (!haveDetectedBeaconsSinceBoot) {
        Log.d(TAG, "auto launching MainActivity");
        Intent RangingIntent = new Intent(this, Monitoring.class);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
         getApplicationContext().startForegroundService(RangingIntent);
        } else  {
            getApplicationContext().startService(RangingIntent);
        }
        haveDetectedBeaconsSinceBoot = true;
        } else {
        if (monitoringActivity != null) {
            Intent RangingIntent = new Intent(this, Monitoring.class);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {               
         getApplicationContext().startForegroundService(RangingIntent);
            } else  {
                getApplicationContext().startService(RangingIntent);
            }
        }
    }

Код ранжирования

    public class Monitoring extends Service implements BeaconConsumer {

        protected static final String TAG = "RangingService";
        private BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);

        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }

        public void onCreate() {
            super.onCreate();
            System.out.println("********STARTING RANGING*********");
            beaconManager.bind(this);
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            beaconManager.unbind(this);
        }

        @Override
        public void onBeaconServiceConnect() {
            beaconManager.setRangeNotifier(new RangeNotifier()  {
                @Override
                public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                    if (beacons.size() > 0) {
                        Log.d(TAG, "didRangeBeaconsInRegion called with beacon count:  "+beacons.size());
                        Log.d(TAG, String.valueOf(beacons.iterator().next()));
                        Beacon firstBeacon = beacons.iterator().next();
                    }
                }

            });

            try {
                beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
            } catch (RemoteException e) {   }
        }
    }

PS: Iam пытается получить журналы ранжирования, когда приложение убито

1 Ответ

0 голосов
/ 28 сентября 2018

Если вы используете область подстановочного знака, в которой для каждого идентификатора установлено значение null, то вы просто не сможете прочитать идентификаторы с помощью API-интерфейсов мониторинга.Два варианта:

  1. Определить несколько регионов, указав UUID для каждого, а затем отслеживать все эти регионы.При получении обратного вызова объект Region, переданный в качестве параметра, будет содержать UUID при вызове region.getId1().

  2. . Используйте API ранжирования в дополнение к API мониторинга.(Вам не нужно включать ранжирование после вызова didEnterRegion, вы можете просто включить его одновременно с мониторингом и оставить его включенным.) Когда ранжирование включено, вы получите обратный вызов на didRangeBeaconsInRegion(...), которыйсодержит список фактических обнаруженных маяков.Затем вы можете прочитать первый идентификатор из этого обратного вызова.

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