Библиотека маяков Android быстро переключается между режимами включения и выключения - PullRequest
0 голосов
/ 02 сентября 2018

Я использовал библиотеку android beacon , чтобы выполнить следующее действие:
Я включал и выключал в быстром темпе. Включение и выключение, включение и выключение и т. Д. 8-9 раз.
Однако маяк потерял сигнал примерно на 10 секунд, а затем сигнал снова начал приниматься.
Кроме того, я попробовал функцию Android API «lescan», что привело к той же ситуации.

Кто-нибудь знает, почему это происходит?

МОЕ испытательное устройство:

  • HUAWEI P20 Pro 8.1
  • Samsung S6 7,0

    переопределить fun onResume () { beaconManager = BeaconManager.getInstanceForApplication (это) beaconManager.getBeaconParsers (). добавить (BeaconParser (). setBeaconLayout (IBEACON_LAYOUT)) beaconManager.getBeaconParsers (). добавить (BeaconParser (). setBeaconLayout (EDDYSTONE_UID_LAYOUT)) beaconManager.getBeaconParsers (). добавить (BeaconParser (). setBeaconLayout (EDDYSTONE_URL_LAYOUT)) beaconManager.getBeaconParsers (). добавить (BeaconParser (). setBeaconLayout (EDDYSTONE_TLM_LAYOUT)) beaconManager.bind (это)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val permissions = ArrayList<String>()
            if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION)
            if (permissions.size != 0) {
                ActivityCompat.requestPermissions(this, permissions.toTypedArray(), 100)
            }
        }
    
    }
    
    override fun onBeaconServiceConnect() {
        beaconManager.addRangeNotifier{ beacons,region ->
            Log.d("addRangeNotifier",beacons.size.toString())
            }
        try {
            beaconManager.startRangingBeaconsInRegion(Region("com.gigabyte.testkotlin", null, null, null))
        } catch (e: RemoteException) {
            e.printStackTrace()
        }
    }
    override fun onPause() {
        super.onPause()
        beaconManager.unbind(this)
    }
    

1 Ответ

0 голосов
/ 04 сентября 2018

Трудно сказать точно, что вы видите, не видя точного кода для воспроизведения, но быстрое включение и выключение сканирования не обязательно является проблемой на всех устройствах.

По умолчанию библиотека маяков Android использует период сканирования переднего плана 1100 мс и период сканирования между 0 мс, поэтому она эффективно включает и выключает сканирование 9 раз всего за 10 секунд - аналогично тому, что вы описали.

Я никогда не замечал этих симптомов при обычном использовании библиотеки на устройствах Samsung или Huawei P9, поэтому что-то еще должно вызывать такое поведение в вашем тестовом примере.

РЕДАКТИРОВАТЬ: Размещенный код указывает, что само действие - это то, что запускается и останавливается быстро, а также потому, что оно привязывается и отсоединяется к beaconManager, когда он запускается и останавливается, он также запускает и останавливает службу Android который сканирует маяки. Это структуры данных с большим весом, которые не предназначены для быстрого запуска и остановки. Краткий ответ: не делайте этого. Если вам действительно нужно быстро запускать и останавливать свою деятельность, привязайте beaconManager вне жизненного цикла активности, возможно, только один при запуске приложения в методе onCreate пользовательского Android Класс приложения.

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