#android #ibeacon #android-ibeacon
#Android #ibeacon #android-ibeacon
Вопрос:
Что мне использовать сейчас, когда интерфейс BootstrapNotifier устарел в IBEACON?
Ibeacon устарел: 1) RegionBootstrap 2) BootstrapNotifier 3) BackgroundPowerSaver
есть ли какое-либо альтернативное решение или справочная ссылка? Я поделился своим полным кодом
import android.annotation.SuppressLint
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NotificationCompat
import org.altbeacon.beacon.BeaconManager
import org.altbeacon.beacon.Region
import org.altbeacon.beacon.powersave.BackgroundPowerSaver
import org.altbeacon.beacon.startup.BootstrapNotifier
import org.altbeacon.beacon.startup.RegionBootstrap
class MainActivity2 : AppCompatActivity(), BootstrapNotifier {
private var regionBootstrap: RegionBootstrap? = null
private var backgroundPowerSaver: BackgroundPowerSaver? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// showNotification(this,"found beacon init")
//enable beacon features///////////////////////////////////////////////////////////////////////
val beaconManager: BeaconManager = BeaconManager.getInstanceForApplication(this)
beaconManager.beaconParsers.clear()
beaconManager.beaconParsers
.add(org.altbeacon.beacon.BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"))
beaconManager.setEnableScheduledScanJobs(false) // disable JobScheduler-based scans (used on Android 8 )
beaconManager.backgroundBetweenScanPeriod = 0 // set the time between each scan to be 1 hour (3600 seconds)
beaconManager.backgroundScanPeriod = 1100 // set the duration of the scan to be 1.1 seconds
val region = Region("backgroundRegion", null, null, null)
regionBootstrap = RegionBootstrap(this, region) // wake up the app when a beacon is seen
backgroundPowerSaver = BackgroundPowerSaver(this) //This reduces bluetooth power usage by about 60%
//////////////////////////////////////////////////////////////////////////////////////////////
}
override fun didEnterRegion(arg0: Region?) {
Log.d("mybeacon", "i found a enter")
showNotification(this,"found beacon enter")
}
override fun didExitRegion(region: Region?) {
Log.d("mybeacon", "i found a exit")
showNotification(this,"found beacon exit")
}
override fun didDetermineStateForRegion(state: Int, region: Region?) {}
//............................................................
fun showNotification(context: Context, message: String?) {
}
}
реализация :
implementation 'org.altbeacon:android-beacon-library:2.19.3'
Ответ №1:
Библиотека версии 2.19 представляет API autowind, которые делают настройку сканирования маяка намного проще, более интуитивно понятным и менее подверженным ошибкам конфигурации.
В более ранних версиях библиотеки автоматический запуск приложения при обнаружении маяка обрабатывался RegionBootstrap
классом утилиты, но начиная с версии 2.19 в этом больше нет необходимости — вы просто запускаете мониторинг с startMonitoring(region)
помощью . Пример кода библиотеки показывает пример того, как запустить раздел автозапуска примеров кода
Чтобы запустить сканирование маяка в фоновом режиме, просто замените regionBootstrap = RegionBootstrap(this, region)
на это:
beaconManager.addMonitorNotifier(this)
beaconManager.startMonitoring(region)
Вместо BootstrapNotifier
интерфейса ваш класс должен реализовывать MonitorNotifier
.
Хотя это не связано с изменениями API autobind в 2.19, имейте в виду, что если вы хотите, чтобы библиотека автоматически запускала ваше приложение при обнаружении маяка, вы должны реализовать приведенный выше код в onCreate
методе пользовательского класса приложения Android, а не в Activity, как показано в вопросе. Если вас не волнует автоматический запуск, то можно сделать это в классе Activity.