Как получить идентификатор, мажор или минор из маяка? - PullRequest
0 голосов
/ 25 января 2019

Этот код обнаруживает маяк, но я не могу получить от него идентификатор, мажор или минор.Я пытался использовать функцию beacon.id1 (), но она всегда возвращает ноль.Я пытаюсь реализовать это с 3 дней, но я не могу понять это, я новичок в технологии маяка.Я хочу получить идентификатор от маяка.Этот код обнаруживает маяк, но я не могу получить идентификатор, мажор или минор.Я пытался использовать функцию beacon.id1 (), но она всегда возвращает ноль.Я пытаюсь реализовать это с 3 дней, но я не могу понять это, я новичок в технологии маяка.Я хочу получить идентификатор от маяка.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    beaconManager = BeaconManager.getInstanceForApplication(this);

     beaconManager.getBeaconParsers().add(new BeaconParser().
           setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));

    beaconManager.bind( this);


    ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                // The toggle is enabled
                Intent eintent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                int intVal=1;
                startActivityForResult(eintent, intVal);
            } else {
                // The toggle is disabled
                BluetoothAdapter bAdapter = BluetoothAdapter.getDefaultAdapter();
                bAdapter.disable();
            }
        }
    });


}
@Override
protected void onDestroy() {
    super.onDestroy();
    beaconManager.unbind((BeaconConsumer) this);
}

public void onBeaconServiceConnect() {
    beaconManager.removeAllMonitorNotifiers();
    beaconManager.addMonitorNotifier(new MonitorNotifier() {


        @Override
        public void didEnterRegion(Region region) {
            Context context = getApplicationContext();
            CharSequence text = "Beacon Found";
            int duration = Toast.LENGTH_LONG;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
            Log.d(TAG, "I just saw a beacon for the first time!");

            a=beacon.getServiceUuid();

            Toast toastt = Toast.makeText(context,"" + a, duration);
            toastt.show();
        }

        @Override
        public void didExitRegion(org.altbeacon.beacon.Region region) {
            Log.i(TAG, "I no longer see a beacon");
        }

        @Override
        public void didDetermineStateForRegion(int i, org.altbeacon.beacon.Region region) {
            //Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+state);
        }

    });

   try {
        beaconManager.startMonitoringBeaconsInRegion(new org.altbeacon.beacon.Region("MY_UUID", null, null, null));
        //beaconManager.startRangingBeaconsInRegion(new org.altbeacon.beacon.Region("myranging", null, null, null));
    }
    catch (RemoteException e) {    }
}

@Override
public void onPointerCaptureChanged(boolean hasCapture) {

}

1 Ответ

0 голосов
/ 25 января 2019

Поймите, что используя API мониторинга, вы получите обратный вызов только тогда, когда поблизости находится любой маяк (один или несколько), который соответствует вашему определению Region. Показанный код определяет регион, устанавливающий все идентификаторы в нуль. Это так называемый регион подстановочного знака, потому что он соответствует любому маяку.

Когда вы получаете обратный вызов на didEnterRegion, он передает копию того же определения Region, которое вы использовали для запуска мониторинга. И потому что вы устанавливаете все идентификаторы в нуль (определение подстановочного знака), это то, что вы получаете, когда вы проверяете идентификаторы объекта Region, переданные этому методу. Эти API предназначены для оповещения о появлении любого из групп маяков.

Если вы хотите знать конкретные идентификаторы видимых маяков, вам просто нужно использовать API ранжирования. Вместо:

beaconManager.startMonitoringBeaconsInRegion(new org.altbeacon.beacon.Region("MY_UUID", null, null, null));

Звоните:

 beaconManager.startRangingBeaconsInRegion(new org.altbeacon.beacon.Region("MY_UUID", null, null, null));

А затем установите ваш уведомитель обратного вызова следующим образом:

beaconManager.addRangeNotifier(new RangeNotifier() {
    @Override
    public void didRangeBeaconsInRegion(Region region, Collection<Beacon> beacons) {
        for (Beacon beacon: beacons} {
          Log.d(TAG, "I see a beacon with ID1 of: "+beacon.getID1());
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...