2017-05-20 2 views
0

Salut, je suis en train de se connecter une application Android à un UID Eddystone Beacon j'ai créé à l'aide Bluez 5,23 à 3.Android trouver une balise créée en utilisant Bluez sur Linux

Raspberry Pi

La balise a été créée en utilisant les éléments suivants commande:

sudo hciconfig hci0 up 
sudo hciconfig hci0 leadv 3 
sudo hcitool -i hci0 cmd 0x08 0x0008 1F 02 01 06 03 03 AA FE 17 16 AA FE 00 E7 01 02 03 04 05 06 07 08 09 0A 01 02 03 04 05 06 00 00 

Cette balise est apparemment fonctionne correctement parce que je peux le voir dans un appareil Android en utilisant une application de magasin comme Beacon Toy.

J'utilise le code suivant dans l'activité principale afin de découvrir la balise:

public class MainActivity extends AppCompatActivity implements BeaconConsumer, MonitorNotifier { 
... 
@Override 
public void onResume() { 
    super.onResume(); 
    beaconManager = BeaconManager.getInstanceForApplication(this.getApplicationContext()); 
    beaconManager.getBeaconParsers().add(new BeaconParser(). 
      setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); 
    beaconManager.bind(this); 
} 

@Override 
public void onBeaconServiceConnect() { 
    Region region = new Region("my-beacon-region", null, null, null); 
    beaconManager.addMonitorNotifier(this); 
    try { 
     beaconManager.startMonitoringBeaconsInRegion(region); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
} 

public void didEnterRegion(Region region) { 
    Log.d(TAG, "I detected a beacon in the region with namespace id " + region.getId1() + 
      " and instance id: " + region.getId2()); 
} 
} 

Tout le monde sait ce qui pourrait se produire? La méthode didEnterRegion n'est jamais appelée. Je mets aussi une méthode 'didDetermineStateForRegion' dans la classe mais je reçois toujours OUTSIDE dans l'état param, ce qui signifie que je ne suis pas dans la région.

Répondre

1

Je suppose que vous n'avez pas demandé ou approuvé les autorisations Bluetooth et Location pour votre application. Regardez: https://altbeacon.github.io/android-beacon-library/requesting_permission.html.

Si vous disposez des autorisations correctes déjà alors quelques questions pour être sûr:
Est la balise reconnu comme Eddystone UID par l'application Beacon Toy?
Est-ce que onBeaconServiceConnect est appelé?

Petit conseil: je vous recommande d'initialiser le BeaconManager dans la méthode onCreate au lieu de onResume. Vous ajoutez un nouvel analyseur chaque fois que votre application est reprise en ce moment. Je le fais réellement dans l'objet application car même onCreate d'activité peut être appelée plusieurs fois.

+0

Je suis d'accord pour m'assurer que l'autorisation Bluetooth est accordée est la clé. Sinon, votre application ne peut pas détecter et vous serez toujours à l'extérieur. – davidgyoung