Я новичок, чтобы светить маяки.

У меня есть устройство BLE, которое нужно обновлять время от времени, когда новые данные доступны в моем мобильном приложении и наоборот - когда BTER сделала что-то, о котором нужно знать приложение.

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

Если пользователь открывает приложение, синхронизация BTR и все приятно и блестяще.

Но я хочу, чтобы эта синхронизация работала на заднем плане, даже если пользователь не открывал приложение в течение 1, 2 дней или даже недель, поэтому в следующий раз, когда приложение открывается, уже будут свежие данные с устройства BLE внутри приложения , и наоборот - приложение будет обновлять BTER для событий, которые должны произойти, даже если пользователь не открывал приложение (например, команду BLE для Flash Colores через 10 минут).

Я пытался использовать библиотеку Bluetooth Bluetooth с RegionBootstrap, но я запутался, если мониторинг даже поступить в моем сценарии.

Это код внутри моего пользовательского приложения Oncreate ():

mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(IBEACON_PARSER_LAYOUT));
mBeaconManager.setRegionStatePersistenceEnabled(false);
mBeaconManager.setBackgroundBetweenScanPeriod(10000l);
mBeaconManager.setForegroundBetweenScanPeriod(10000l);
mBeaconManager.setBackgroundScanPeriod(1100l);
mBeaconManager.setForegroundScanPeriod(1100l);

region = new Region(getPackageName(),Identifier.parse(MY_BLE_BEACON_UID), null, null);
mRegionBootstrap = new RegionBootstrap(this, region);

Это мои срабатывания событий:

@Override
public void didEnterRegion(Region region) {
  Log.e(TAG, "didEnterRegion: ");
  synchronizeBleWithTheApp();
  playSoundEnterRegion();
}

@Override
    public void didExitRegion(Region region) {
    Log.e(TAG, "didExitRegion: ");
    playSoundExitRegion();
}

private void synchronizeBleWithTheApp() {
// 1) Check if there is any new data the BLE is interested in, if yes the app should push it to the BLE in the background.

// 2) Check if there is any new data in the BLE the app is interested in, if yes fetch it from the BLE in the background.

}

Мои вопросы:

1) Должен ли я даже использовать мониторинг в моем случае? Я имею в виду, я хочу продолжать пытаться синхронизировать, даже если устройство все еще в регионе каждые x минут. Костюмы RegionBootstrap в этом случае?

Прямо сейчас didenterregion срабатывает один раз, и через 30 ~ секунды onexitregion срабатывают, хотя Ble Beacon передается, который путает для меня.

2) Если SynchronizebleWithTheapp (), который находится внутри пользовательского класса приложений, использует код в классе основной активности деятельности, это означает, что мне нужно приложение для открытия этой деятельности Могу ли я еще вызвать синхронизацию на заднем плане?

1
Richard Miller 2 Окт 2019 в 14:47

1 ответ

Лучший ответ

Несколько моментов:

  1. Если вы хотите получить обновления, даже если присутствуют присутствующие Beacon, вы должны использовать Ranging API в дополнение к RegionBootstrap. Начните начислять, вызывая startRangingBeaconsInRegion(...) в didDetermineStateForRegion обратного вызова.

  2. Вы не должны помещать какой-либо фоновый код в классе активности, поскольку Android может убить активность, если не видно. Самое простое место для поставок этого кода находится в пользовательском классе приложений, где вы используете RegionBootaStrap (или в пользовательском классе, который инициализируется и доступа к пользовательскому классу приложений).

Вы также можете понадобиться на переднем плане, чтобы ваше приложение запустить более 10 минут на заднем плане на Android 8+. Библиотека позволяет легко добавить это без программирования собственного обслуживания переднего плана. Смотрите библиотеки здесь: https://altbeacon.github.io/ Android-BeaCon-Библиотека / передний план - Service.html

Если вы видите, как вы можете остановиться в фоновом режиме после периода времени на Android 7+ (вызывая событие выхода в регион), вам может потребоваться добавить код, чтобы принудительно заставить фоновое сканирование длинного периода: https://github.com/altbeaCon/Android-beaCon-library/pull/529

Наконец, будьте осторожны с пользовательскими убийцами приложений на китайских умом, которые могут сделать невозможным удовлетворение ваших требований к телефонам, сделанным этим производителями. Смотрите здесь: http: //www.davidgyoungtech .com / 2019/04/30 / поднимаются непринужденные вилки

2
davidgyoung 2 Окт 2019 в 12:28