У меня возникли проблемы с использованием параметра -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
вместо даты и записывать новый номер сборки обратно в файл.
В версиях ОС 8+ Android ограничивает фоновую обработку, если она не является частью службы переднего плана или заданием, инициированным JobScheduler. В результате этого ограничения библиотека маяков Android по умолчанию будет использовать JobScheduler на Android 8+. На переднем плане «немедленный» ScanJob будет постоянно выполняться для сканирования. В фоновом режиме (то есть, когда никакие действия не видны с разблокированным экраном), Android не позволяет этого. Работа может быть запланирована не чаще, чем раз в ~ 15 минут. Вот почему вы видите, что сканирование прекращается.
Неважно, что у вас есть собственный сервис переднего плана. Android по-прежнему применяет эти ограничения для любой фоновой обработки, выполняемой вне этой службы переднего плана.
Две альтернативы:
Жить с ограничениями на работу (сканирование каждые 15 минут). Используйте BackgroundPowerSaver для автоматического переключения между режимом переднего плана / фона и установите beaconManager.setBackgroundScanPeriod(5000)
(для сканирования в течение 5 секунд каждые 15 минут). Для ясности следует также установить beaconManager.setBackgroundBetweenScanPeriod(15*60*1000)
(15 минут), хотя можно установить более низкое значение, которое будет быть запрещенным ОС на Android 8+.
Настройте библиотеку для сканирования с помощью своей собственной службы переднего плана (да, как службы второго переднего плана), как описано здесь . Затем вы можете прекратить использовать свой собственный сервис переднего плана или оставить его. Если вы сохраните его, вы увидите два значка уведомлений о двух запущенных службах переднего плана. можно объединить эти два уведомления , если вы хотите сохранить две службы переднего плана и показать только одно уведомление.