Alt Beacon Android нестабилен

Я создаю приложение для Android на основе Alt Beacon. Я должен предварить это тем фактом, что моим тестовым устройством является планшет Digiland (P-O-S) под управлением Android 4.4.

Я использую USB-маяк Radius Networks и их библиотеку Alt Beacon, которую можно найти здесь: https://github.com/AltBeacon/android-beacon-library

Как в моем собственном приложении, так и в эталонном приложении, предоставленном с библиотекой, я наблюдаю значительную нестабильность/очень медленное время обнаружения маяка. Например, вы можете увидеть журнал эталонного приложения ниже. Планшет все время находится на расстоянии не более 1/2 метра от маяка.

Кто-нибудь видел такое поведение раньше? Я делаю что-то неправильно? Частота вещания маяка установлена ​​на 10 Гц, а мощность установлена ​​на максимум. Должен ли я получить другое устройство и попробовать его на нем? Я видел некоторые другие сообщения, в которых предлагалось отключить Wi-Fi, что я и сделал, и этот журнал относится к пробной версии с отключенным Wi-Fi.

Следует отметить, что я увеличил частоту сканирования с помощью следующего блока кода в подклассе приложения:

beaconManager.setBackgroundBetweenScanPeriod(9000l);
beaconManager.setBackgroundScanPeriod(1000l);
beaconManager.setForegroundBetweenScanPeriod(9000l);
beaconManager.setForegroundScanPeriod(1000l);
try{
    beaconManager.updateScanPeriods();
}catch (RemoteException e){
    e.printStackTrace();
}

Я не уверен, что это сделано неправильно, но когда я удаляю его, я все еще вижу то же поведение, которое описано в журнале ниже, только в течение более длительного периода времени.

Любые советы, которые могут дать люди, будут высоко оценены, так как я чувствую, что крутлю колеса на этом!

07-01 15:23:59.005  10771-10771/org.altbeacon.beaconreference D/ReferenceApplication﹕ setting up background monitoring for beacons and power saving
07-01 15:23:59.655  10771-10816/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:23:59.655  10771-10816/org.altbeacon.beaconreference D/ReferenceApplication﹕ auto launching MainActivity
07-01 15:24:20.154  10771-11297/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:24:39.174  10771-11486/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:25:00.132  10771-11647/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:25:09.472  10771-11730/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:25:30.123  10771-11871/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:25:39.173  10771-11954/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:26:00.065  10771-12070/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:26:29.099  10771-12083/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:26:29.100  10771-12083/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:26:40.112  10771-12096/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:27:19.120  10771-12127/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:27:19.120  10771-12127/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:27:40.041  10771-12208/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:27:59.110  10771-12786/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:28:30.144  10771-13052/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:28:39.202  10771-13131/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:28:50.133  10771-13226/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:29:09.125  10771-13375/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:29:30.119  10771-13452/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:29:49.144  10771-13473/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:30:00.060  10771-13510/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:30:19.134  10771-13552/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:30:19.135  10771-13552/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:30:30.096  10771-13560/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:31:09.124  10771-13575/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:31:09.125  10771-13575/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:31:20.110  10771-13576/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:31:29.101  10771-13578/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:31:29.101  10771-13578/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:32:40.101  10771-13647/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:32:59.131  10771-13651/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.

Еще одна интересная вещь, на которую следует обратить внимание, это то, что когда я делаю фильтр для onScanResult в журналах, я вижу это:

07-01 15:45:49.074  10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-91
07-01 15:45:49.117    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-56
07-01 15:45:49.120  10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-56
07-01 15:45:49.365    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-76
07-01 15:45:49.368  10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-76
07-01 15:45:59.082    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-77
07-01 15:45:59.084  10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-77
07-01 15:45:59.130    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-59
07-01 15:45:59.133  10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-59
07-01 15:45:59.140    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-76
07-01 15:45:59.141  10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-76
07-01 15:46:09.115    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-58
07-01 15:46:09.117  10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-58
07-01 15:46:09.124    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-86
07-01 15:46:09.126  10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-86
07-01 15:46:09.135    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-76
07-01 15:46:09.139  10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-76
07-01 15:46:19.060    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-91
07-01 15:46:19.062  10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-91
07-01 15:46:19.092    1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-64

Устройство 00:07:80 — мой маяк, но я понятия не имею, когда работает устройство 24:4B:03. Кто-нибудь знает, как я могу получить больше данных об этом устройстве? Возможно ли, что это мешает моему реальному сигналу? Я пробовал использовать оба

Region region = new Region("backgroundRegion",
                Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), null, null);

и

Region region = new Region("backgroundRegion",null, null, null); 

К сожалению, я получаю это случайное колебание с обоими вариантами.

ОБНОВИТЬ:

Я также запустил это с активированным флагом beaconManager.setDebug(true). Вот результирующий журнал

ОБНОВЛЕНИЕ 2:

Я переключил свой маяк на трансляцию только для iBeacon, и проблема исчезла примерно на 10 минут. К сожалению, проблема быстро вернулась. Просматривая журналы, я вижу совсем другое. Логи можно посмотреть здесь. Я предполагаю, что проблема в этой строке:

07-01 21:46:31.035    2499-2499/com.avtar.truckkeeper D/CycledLeScanner﹕ cancel wakeup alarm: PendingIntent{41f32070: android.os.BinderProxy@41d8f750}

Любые мысли/помощь будут высоко оценены!


person akhalsa    schedule 01.07.2015    source источник
comment
Суть, указанная в нижней части вопроса, показывает, что устройство BLE с MAC-адресом 00:07:80:1E:7E:B7 было обнаружено мобильным устройством только один раз, и это обнаружение было в формате iBeacon.   -  person davidgyoung    schedule 02.07.2015
comment
Для обновления 2 в журналах указано, что Android вообще не обнаружил ни одного устройства Bluetooth (независимо от формата маяка) за период сканирования в одну секунду в журналах. Это указывает на то, что передатчик не передает или приемник не принимает: D/CycledLeScanner﹕ Scan started 07-01 21:46:40.047 2499-2499/com.avtar.truckkeeper D/CycledLeScanner﹕ Done with scan cycle   -  person davidgyoung    schedule 02.07.2015
comment
Вы можете увеличить период сканирования, чтобы он составлял более одной секунды каждые 10 секунд. Радиоприемник должен улавливать высокий процент из 10 пакетов маяков, отправляемых каждую секунду (вы настроили его на 10 Гц, да?) Но, по-видимому, это не так.   -  person davidgyoung    schedule 02.07.2015


Ответы (1)


Я подозреваю, что происходит несколько вещей на основе анализа «результирующего журнала», указанного в нижней части ответа:

  1. Передающий маяк настроен на передачу пакетов AltBeacon и iBeacon.
  2. Библиотека Android Beacon не настроена для обнаружения пакетов iBeacon, только пакеты AltBeacon по умолчанию.
  3. Передающий маяк находится в режиме подключения.
  4. Планшет Digiland (P-O-S) может обнаруживать только один пакет от каждого отдельного устройства Bluetooth LE за цикл сканирования, когда маяк находится в режиме подключения. (Несколько других моделей Android ведут себя так же, включая Nexus 4 и Moto G.)
  5. Интервал сканирования был настроен на очень длинный — сканирование в течение одной секунды каждые 10 секунд.

Все эти факторы вместе создают идеальный шторм, вызывающий следующие проблемы:

Из-за недостатка, описанного в (4), и того факта, что маяк находится в режиме подключения, как описано в (3), это означает, что за цикл сканирования будет получен только один пакет. Поскольку маяк отправляет чередующиеся объявления, как описано в (1), это означает, что вероятность того, что этот пакет будет пакетом iBeacon, составляет 50 на 50. Если это пакет iBeacon, поскольку библиотека не настроена для обнаружения iBeacon, как описано в (2), в этом цикле не будет обнаружений. И поскольку цикл сканирования длится 10 секунд, как описано в 5, это приведет к прерывистым выходам из области и повторным входам. (Если в течение 10 секунд маяк не появляется, библиотека инициирует выход из региона.)

Изменение любой из этих вещей, вероятно, устранит проблему:

  1. Перенастройте маяк, чтобы отключить передачу iBeacon (или настройте библиотеку для обнаружения передач iBeacon).

  2. Сократите время ожидания подключения вашего маяка, например. через 60 секунд. Как только он больше не может быть подключен, планшет сможет получать несколько пакетов в каждом цикле сканирования, и проблема исчезнет.

  3. Уменьшите продолжительность цикла сканирования. Если вы оставите время сканирования по умолчанию 1100 мс с 0 мс между временем сканирования на переднем плане, то у библиотеки будет 9 циклов для обнаружения маяка, прежде чем сработает 10-секундный тайм-аут региона. Вероятность того, что маяк не будет обнаружен за 9 циклов, составляет 50-50, тогда вероятность станет 0,5^9 = 0,1%.

person davidgyoung    schedule 02.07.2015
comment
Привет, Дэвид, это решение какое-то время работало отлично, однако проблема вернулась. Я просмотрел журналы, и похоже, что маяк часто просто не замечается. (Обратите внимание, у меня все еще отключен AltBeacon и я использую только ibeacon). Я продолжаю видеть это в журналах: Вызвано: java.lang.ClassNotFoundException: org.altbeacon.beacon.service.StartRMData at java.lang.VMClassLoader.loadClass( Родной метод) на java.lang.BootClassLoader.findClass(ClassLoader.java:761)... Есть мысли? - person akhalsa; 09.07.2015
comment
@akhalsa, это звучит как другая проблема, поэтому я бы открыл новый вопрос. Первый вопрос, который я хотел бы задать, заключается в том, видите ли вы такое же поведение в эталонном приложении или приложении Locate на вашем устройстве. Было бы хорошо включить это и в ваш новый вопрос. - person davidgyoung; 09.07.2015