Android Altbeacon интервал, когда приложение в фоновом режиме

У меня возникли проблемы с использованием параметра -ldflags при создании моего смешанного проекта приложения и библиотеки в командной строке, поэтому я решил использовать целевой файл Makefile для создания исходного файла Go, содержащего версию моего приложения и дату сборки:

BUILD_DATE := `date +%Y-%m-%d\ %H:%M`
VERSIONFILE := cmd/myapp/version.go

gensrc:
    rm -f $(VERSIONFILE)
    @echo "package main" > $(VERSIONFILE)
    @echo "const (" >> $(VERSIONFILE)
    @echo "  VERSION = \"1.0\"" >> $(VERSIONFILE)
    @echo "  BUILD_DATE = \"$(BUILD_DATE)\"" >> $(VERSIONFILE)
    @echo ")" >> $(VERSIONFILE)

В моем методе init() я делаю это:

flag.Usage = func() {
    fmt.Fprintf(os.Stderr, "%s version %s\n", os.Args[0], VERSION)
    fmt.Fprintf(os.Stderr, "built %s\n", BUILD_DATE)
    fmt.Fprintln(os.Stderr, "usage:")
    flag.PrintDefaults()
}

Однако, если вы хотите увеличить число номеров сборки, а не дату сборки, вам, вероятно, потребуется создайте локальный файл, содержащий последний номер сборки. Ваш Makefile будет читать содержимое файла в переменной, увеличивать его, вставлять в файл version.go вместо даты и записывать новый номер сборки обратно в файл.

3
задан kimyas78 14 March 2019 в 09:42
поделиться

1 ответ

В версиях ОС 8+ Android ограничивает фоновую обработку, если она не является частью службы переднего плана или заданием, инициированным JobScheduler. В результате этого ограничения библиотека маяков Android по умолчанию будет использовать JobScheduler на Android 8+. На переднем плане «немедленный» ScanJob будет постоянно выполняться для сканирования. В фоновом режиме (то есть, когда никакие действия не видны с разблокированным экраном), Android не позволяет этого. Работа может быть запланирована не чаще, чем раз в ~ 15 минут. Вот почему вы видите, что сканирование прекращается.

Неважно, что у вас есть собственный сервис переднего плана. Android по-прежнему применяет эти ограничения для любой фоновой обработки, выполняемой вне этой службы переднего плана.

Две альтернативы:

  1. Жить с ограничениями на работу (сканирование каждые 15 минут). Используйте BackgroundPowerSaver для автоматического переключения между режимом переднего плана / фона и установите beaconManager.setBackgroundScanPeriod(5000) (для сканирования в течение 5 секунд каждые 15 минут). Для ясности следует также установить beaconManager.setBackgroundBetweenScanPeriod(15*60*1000) (15 минут), хотя можно установить более низкое значение, которое будет быть запрещенным ОС на Android 8+.

  2. Настройте библиотеку для сканирования с помощью своей собственной службы переднего плана (да, как службы второго переднего плана), как описано здесь . Затем вы можете прекратить использовать свой собственный сервис переднего плана или оставить его. Если вы сохраните его, вы увидите два значка уведомлений о двух запущенных службах переднего плана. можно объединить эти два уведомления , если вы хотите сохранить две службы переднего плана и показать только одно уведомление.

0
ответ дан davidgyoung 14 March 2019 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: