2016-12-28 1 views
1
BeaconParser beaconParser = new BeaconParser() 
    .setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"); 
Beacon beacon = new Beacon.Builder() 
    .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6") 
    .setId2("1") 
    .setId3("2") 
    .setManufacturer(0x0118) 
    .setTxPower(-59) 
    .setDataFields(Arrays.asList(new Long[]{0l})) 
    .build(); 
beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() { 

    @Override 
    public void onStartFailure(int errorCode) { 
     Log.e(TAG, "Advertisement start failed with code: " + errorCode); 
    } 

    @Override 
    public void onStartSuccess(AdvertiseSettings settingsInEffect) { 
     Log.i(TAG, "Advertisement start succeeded."); 
    } 
}); 

Exécutez ceci, Le journal "Début de la publication a réussi." est montré, est le succès. Mais, mBeaconManager.startMonitoringBeaconsInRegion (région); ne trouve pas le altBeacon.Comment utiliser un appareil Android pour une balise par la bibliothèque android-beacon-library?

Répondre

0

Vous ne pouvez pas détecter une balise sur le même périphérique qui transmet les paquets. Ce n'est pas une limitation spécifique à la bibliothèque Beacon Android, c'est juste comment Bluetooth LE fonctionne. Il est courant que les systèmes de matériel radio soient conçus pour ne pas recevoir leurs propres transmissions.

+0

, Je vous remercie beaucoup pour votre réponse, j'utilise un autre téléphone Android pour détecter, mais pas trouver, je télécharger des APK pour détecter, est pas détectée, S'il vous plaît aidez-moi à vérifier le code ci-dessus est correct, je pas sûr que les paramètres de setBeaconLayout, setId1, setId2, setId3, setManufacturer est correct, parce que je veux utiliser le téléphone Android comme un appareil Beacon, je ne suis pas sûr de savoir comment écrire ces paramètres, Mon appareil Android est 6.0. Réjouissez-vous de votre réponse, Merci. –

+0

J'utilise l'apk de Localiser la balise peut trouver la balise, je ne sais pas comment utiliser la méthode de setDataFields et comment écrire le paramètre, s'il vous plaît aidez-moi, merci! –

+0

Si l'application de localisation détecte la balise, mais pas votre code, le problème provient du code de détection. S'il vous plaît poster ce code. – davidgyoung

0

Merci beaucoup pour votre réponse!

public class MainActivity extends Activity implements BeaconConsumer, RangeNotifier { 

    private BeaconManager mBeaconManager; 
public void onResume() { 
     super.onResume(); 
     mBeaconManager = BeaconManager.getInstanceForApplication(this.getApplicationContext()); 
     // Detect the main Eddystone-UID frame: 
     mBeaconManager.getBeaconParsers().add(new BeaconParser(). 
       setBeaconLayout(BeaconParser.ALTBEACON_LAYOUT)); 
     mBeaconManager.getBeaconParsers().add(new BeaconParser(). 
setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); 
     // Detect the telemetry Eddystone-TLM frame: 
     mBeaconManager.getBeaconParsers().add(new BeaconParser(). 
       setBeaconLayout(BeaconParser.EDDYSTONE_TLM_LAYOUT)); 
     mBeaconManager.bind(this); 
} 

public void onBeaconServiceConnect() { 
     Log.d("youfu","onBeaconServiceConnect."); 
     Region region = new Region("all-beacons-region", null, null, null); 
     try { 
      mBeaconManager.startRangingBeaconsInRegion(region); 
     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 
     mBeaconManager.addRangeNotifier(this); 
    } 

@Override 
    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
     Log.d("youfu","didRangeBeaconsInRegion region=== "+region); 
     for (Beacon beacon: beacons) { 
      if (beacon.getServiceUuid() == 0xfeaa && beacon.getBeaconTypeCode() == 0x00) { 
       // This is a Eddystone-UID frame 
       Identifier namespaceId = beacon.getId1(); 
Identifier instanceId = beacon.getId2(); 
       Log.d("youfu", "I see a beacon transmitting namespace id: "+namespaceId+ 
         " and instance id: "+instanceId+ 
         " approximately "+beacon.getDistance()+" meters away."); 

       // Do we have telemetry data? 
       if (beacon.getExtraDataFields().size() > 0) { 
long telemetryVersion = beacon.getExtraDataFields().get(0); 
        long batteryMilliVolts = beacon.getExtraDataFields().get(1); 
        long pduCount = beacon.getExtraDataFields().get(3); 
        long uptime = beacon.getExtraDataFields().get(4); 
Log.d("youfu", "The above beacon is sending telemetry version "+telemetryVersion+ 
          ", has been up for : "+uptime+" seconds"+ 
          ", has a battery level of "+batteryMilliVolts+" mV"+ 
          ", and has transmitted "+pduCount+" advertisements."); 
} 
      } 
     } 
    } 

@Override 
    public void onPause() { 
     super.onPause(); 
     mBeaconManager.unbind(this); 
    } 
} 

The log like this: 
12-30 10:52:57.232 16674-16674/? D/youfu: onBeaconServiceConnect. 
12-30 10:52:58.483 16674-16870/? D/youfu: didRangeBeaconsInRegion region=== id1: null id2: null id3: null 
12-30 10:52:59.591 16674-16925/? D/youfu: didRangeBeaconsInRegion region=== id1: null id2: null id3: null 
12-30 10:53:00.699 16674-16945/? D/youfu: didRangeBeaconsInRegion region=== id1: null id2: null id3: null 
region is null, so please help me to check the code, Thanks. 
+0

Salut, s'il vous plaît aidez-moi à vérifier le code ci-dessus sur balise de numérisation, Dans l'attente de votre réponse, merci! –