Невозможно увеличить период сканирования маяка - библиотека Altbeacon

Когда я запускаю приложение, начинается сканирование и через 2-3 секунды срабатывает функция onBeaconServiceConnect (). Мне нужно его увеличить. Также я использую фоновое сканирование маяка другого класса. И я использую еще один объект beaconManager. Хотя я использую для этого функцию setForegroundBetweenScanPeriod (), она не работает. Функция onBeaconServiceConnect () срабатывает за 2-3 секунды. Как я могу это решить? Мои функции, как показано ниже:

------------------------ Мой основной класс для обнаружения маяков на переднем плане ------------------ ----

private void generateBeaconOptions() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("This app needs location acces");
            builder.setMessage("Please grat location acces so this app can detect beacons");
            builder.setPositiveButton(android.R.string.ok, null);

            builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialogInterface) {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
                }
            });
        }
    }
    beaconManager = BeaconManager.getInstanceForApplication(this);
    beaconManager.getBeaconParsers().clear();
    beaconManager.getBeaconParsers().add(new BeaconParser().
            setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));

    region = new Region("com.example.myapp.boostrapRegion", null, null, null);
    beaconManager.setForegroundScanPeriod(1100l);
    beaconManager.setForegroundBetweenScanPeriod(30000l);
    beaconManager.bind(this);
}

@Override
public void onBeaconServiceConnect() {
    if(!ConfigFile.isDemo()) {
        beaconManager.setRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                if (beacons.size() > 0) {
                    UniPromClient.setIsInAnyBeaconRegion(true);
                    for (Beacon beacon : beacons) {
                        logToDisplay("Detected " + beacon.toString() + " with UUID " + beacon.getId1().toString() + " and Major ID " + beacon.getId2().toString() + " and Minor ID " + beacon.getId3().toString());
                        UniPromClient.setUniPromBeacon(new UniPromBeacon(beacon.getId1().toString(),
                                beacon.getId2().toString(),
                                beacon.getId3().toString()));
                        Handler handler = new Handler(Looper.getMainLooper());
                        handler.post(new Runnable() {

                            @Override
                            public void run() {
                                updateUserScoreAsUserStaying();
                            }
                        });

                        break;
                    }
                } else {
                    UniPromClient.setIsInAnyBeaconRegion(false);
                    UniPromClient.setUniPromBeacon(null);
                    logToDisplay("No iBeacons detected");
                }

                if (UniPromClient.isPrevIsAnyBeaconInRegion() != UniPromClient.isInAnyBeaconRegion()) {
                    if (UniPromClient.isInAnyBeaconRegion()) {
                        showMainActivityAlert("Uni Promotion alanına girdiniz :)");
                    } else if (!UniPromClient.isInAnyBeaconRegion() && UniPromClient.isPrevIsAnyBeaconInRegion()) {
                        showMainActivityAlert("Uni Promotion alanından çıktınız :(");
                    }
                    UniPromClient.setPrevIsAnyBeaconInRegion(UniPromClient.isInAnyBeaconRegion());
                    generateDrawerList();
                }
            }

        });

        try {
            beaconManager.startRangingBeaconsInRegion(region);
        } catch (RemoteException e) {
        }
    }
}

-------------------------- Мой класс Backgorund для обнаружения маяков на заднем плане ------------

@Override
public void onCreate() {
    super.onCreate();
    BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
    //BeaconManager.setsManifestCheckingDisabled(true);
    //beaconManager = BeaconManager.getInstanceForApplication(this);
    beaconManager.getBeaconParsers().clear();
    beaconManager.getBeaconParsers().add(new BeaconParser().
            setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
    beaconManager.setBackgroundScanPeriod(1000l);
    beaconManager.setBackgroundBetweenScanPeriod(5000l);
    Region region = new Region("com.example.myapp.boostrapRegion", null, null, null);
    regionBootstrap = new RegionBootstrap(this, region);
    //backgroundPowerSaver = new BackgroundPowerSaver(this);
}

person fuat    schedule 21.05.2016    source источник
comment
Привязка к службе в Android должна возвращаться почти мгновенно, значит, что-то не так. Какие типы классов показаны выше? Мероприятия? Применение? Когда они по очереди вызываются друг к другу?   -  person davidgyoung    schedule 21.05.2016


Ответы (1)


Если сканирование уже запущено при изменении периодов сканирования, необходимо вызвать beaconManager.updateScanPeriods(), чтобы изменения вступили в силу.

Также обратите внимание на tgat для автоматического переключения периодов сканирования переднего плана / фона, вы должны использовать BackgroundPowerSaver, который отображается как закомментированный. Если этот параметр включен, он будет следить за приостановкой и возобновлением действий и устанавливать для скорости сканирования фоновые настройки, когда действия не отображаются.

Если вы не хотите использовать BackgroundPowerSaver, вы должны позвонить beaconManager.setBackgroundMode(true);, чтобы активировать скорость фонового сканирования.

person davidgyoung    schedule 21.05.2016