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, é o
m:
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:
Respostas:
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.
fonte
m:2-3=0215
mudança é realmente necessária.setBeaconLayout
?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
0x4C00
e o tipo de beacon deve ser0x0215
. 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.
fonte