Este é o layout correto para detectar iBeacons com a Android Beacon Library da AltBeacon?

93

Modifiquei com sucesso o aplicativo de implementação de referência da Biblioteca de beacon do Android usando o seguinte layout de beacon , para que ele detecte um dispositivo iBeacon que tenho em mãos:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().add(new BeaconParser().
               setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
        beaconManager.bind(this);
    }
}

Por ser novo no que diz respeito aos pacotes BLE, não tenho certeza se esse é o layout correto a ser usado. A biblioteca endossa o padrão AltBeacon e sua documentação não menciona como detectar dispositivos iBeacon.

  • Este código detectará todos os dispositivos iBeacon? ou seja, é om: prefixo é muito restritivo ou é a sequência de bytes correta que corresponde à especificação do iBeacon?
  • Da mesma forma, o resto do layout corresponde exatamente às especificações do iBeacon?

Referência:

ento
fonte
O aplicativo de referência está desativado agora ..
BlueTrin
1
@BlueTrin Obrigado, atualizou o link para o novo repo.
ento

Respostas:

66

Isso funcionou para mim: "m: 2-3 = 0215, i: 4-19, i: 20-21, i: 22-23, p: 24-24"

Não acho que você precise combinar a parte 4c00 porque essa é a id do fabricante, então você provavelmente pode deixar isso desligado e começar com m: 2-3 = 0215 Todo o resto parece certo e funciona.

mobiledevbrick
fonte
8
Obrigado! Testando com beacons Estimote, posso confirmar que a m:2-3=0215mudança é realmente necessária.
matiash
8
Isso funcionou para mim também .. usei .. beaconManager.getBeaconParsers (). Add (new BeaconParser (). SetBeaconLayout ("m: 2-3 = 0215, i: 4-19, i: 20-21, i: 22 -23, p: 24-24 "));
John
2
Como você lê esse layout? O que é m, i e p? Eu tenho um farol fora da caixa comprado da China. Usando o aplicativo Bluetooth LE Scanner, consegui encontrar o UUID do beacon, maior e menor. Mas como encontro o padrão UUID para colocá-lo setBeaconLayout?
emen
3
@AimanB Consulte: stackoverflow.com/questions/25319682/… . Neste, m: Dados do fabricante, i: UUID de proximidade, i: Número principal, i: Número secundário, p: Potência do sinal, d: nível da bateria. Eles representam o deslocamento de byte. (Você precisa adicionar 6 durante a contagem). Por exemplo: o ID do fabricante está entre o 8º e o 9º na string "m: 2-3 = 0215, i: 4-19, i: 20-21, i: 22-23, p: 24-24 ".
trueblue
3
existe uma maneira de fazer a varredura de qualquer beacon ao redor, independentemente se sua estimativa ou não?
N Jay
3

Você pode baixar as especificações do iBeacon (clique em "Baixar arte e especificações").

Na versão atual, o ID da empresa deve ser 0x4C00e o tipo de beacon deve ser 0x0215. Todos os outros campos são obrigatórios e conforme você especificou.

Então, sim, você está exatamente correto e ele detectará todos os iBeacons compatíveis.

OT: Também especifica que o intervalo de publicidade deve ser de 100 ms, mas duvido seriamente que todos os iBeacons sigam isso.

Timmmm
fonte