1

я столкнулся этот вопрос постоянно в Android 4.4, 5 и 6.BluetoothDevice всегда возвращает нуль на GetName()

Я Выполнение устройства BLE Bluetooth сканирования и после этого я могу получить доступ к их адрес (GetAddress ()) и другие данные. Но если я вызываю device.getName(), он возвращает null EVERY TIME.

Эта документация не помогает, он только говорит, что возвращает нулевое значение, если "возникла проблема": https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getName()

Другие должности, которые я посетил неудачно:

https://code.google.com/p/android/issues/detail?id=34411

android BluetoothDevice.getName() return null

ble device bluetoothdevice.getname() returns null

PS: Я использую n устаревшие методы в Android API уровня 21+, поэтому это не связано с проблемой.

Есть идеи, что может быть неправильным?

+0

Я уверен, что это, вероятно, стандартный код, но вы должны добавить некоторые из того, что используете, и, возможно, кто-то заметит что-то неправильно. Работает ли он на некоторых устройствах? Я никогда не сталкивался с этой проблемой. – codeMagic

+0

@codeMagic, спасибо за ответ. Я добавлю код как можно скорее, но это действительно стандартное внедрение. И он не работает, по крайней мере, в 4 устройствах, где я мог бы его протестировать. –

ответ

1

Возможно, ваше устройство BLE не транслирует имя. Полезная нагрузка для вещания ограничена 31 байтом, а некоторые производители опускают имя для сохранения комнаты.

+0

Устройство BLE действительно транслирует имя, и для проекта есть эквивалентное приложение для iOS, из которого я могу получить имя устройства. –

+0

Прошло много времени, но я мог бы, наконец, проверить эту проблему. Это правильный ответ. У приложений iOS было другое поведение по причинам, которые я не знаю. Мое устройство BLE не рекламировало это имя, потому что оно было слишком длинным. Сокращение названия позволило моему приложению прочитать его без проблем. –

+0

привет, я столкнулся с этой проблемой сейчас, но мой BLE передал имя, которое я получил на нескольких устройствах Android, но на другом устройстве имя по-прежнему равно null. Есть ли способ бросить предупреждение на основе версии bluetooth my post https: // stackoverflow.com/q/46968687/4111151 – prasanthMurugan

1

Я больше не использую getName(), поскольку он кажется неопределенным, когда он возвращает реальное имя (и если да, то сколько лет это кешированное имя?) И когда оно равно null. Просто проанализируйте файл scanRecord в рекламных данных и получите оттуда имя или прочитайте характеристику имени в GATT DB, если вы подключены.

+0

Не могли бы вы привести краткий пример первого предложения? Я попытаюсь реализовать оба варианта и опубликовать свои результаты здесь. Благодаря ! –

+0

Данные рекламы построены из списка «длина, тип, значение», где длина и тип - по одному байту (длина включает тип и значение). Существуют типы для полного имени (0x09) и для сокращенного имени (0x08). См. Https://android.googlesource.com/platform/frameworks/base/+/414a486e4c721f0f8f9f86823a05422acb1c509f/core/java/android/bluetooth/BluetoothLeAdvertiseScanData.java#540 для полного анализатора. – Emil

Смежные вопросы