Я новичок, чтобы светить маяки.
У меня есть устройство 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 ответ
Несколько моментов:
Если вы хотите получить обновления, даже если присутствуют присутствующие Beacon, вы должны использовать Ranging API в дополнение к RegionBootstrap. Начните начислять, вызывая
startRangingBeaconsInRegion(...)
вdidDetermineStateForRegion
обратного вызова.Вы не должны помещать какой-либо фоновый код в классе активности, поскольку 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 / поднимаются непринужденные вилки
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .