Обновить расстояние до выбранного устройства iBeacon с помощью библиотеки Altbeacon на Android

Я хочу отобразить текущее расстояние, вычисленное функцией getDistance() из библиотеки AltBeacon, для выбранных маяков.

Например, у меня есть 3 маяка в диапазоне, и 2 из них сохранены в SavedBeacons - это коллекция объекта маяков. Существуют маяки, выбранные пользователем из функции public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region).

Я хотел бы отображать их (только выбранные) с автоматическим 1-секундным обновлением на их текущем расстоянии.

Теперь вывод — это только информация о маяках и расстоянии, сохраненном в то время, когда я добавил его в коллекцию SavedBeacons. Его расстояние не обновляется.

Вот мой класс с активностью для отображения выбранных маяков:

public class SelectBeacon extends Activity {

private ListView listview;
private AdapterBeaconDevices bAdapter;
private TextView noBeaconsFound;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_select_beacon);

    this.bAdapter = new AdapterBeaconDevices(this, SavedBeacons);

    listview = ((ListView) findViewById(R.id.listView2));
    listview.setAdapter(bAdapter);


    noBeaconsFound = (TextView) findViewById(R.id.empty2);
    SetEmptyButtonVisiblity(SavedBeacons.size());


    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
            //nothing yet
        }
    });

    refresh();
}

private void refresh(){

    final Handler handler = new Handler();
    handler.postDelayed( new Runnable() {

        @Override
        public void run() {

            Toast.makeText(SelectBeacon.this, "test_refresh_msg",
                    Toast.LENGTH_LONG).show();

            bAdapter.notifyDataSetChanged();

            handler.postDelayed( this, 1000 );
        }
    }, 1000 );
}

private void SetEmptyButtonVisiblity(final int a)
{
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (a == 0) {
                noBeaconsFound.setVisibility(View.VISIBLE);
            } else {
                noBeaconsFound.setVisibility(View.GONE);
            }
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
}

@Override
protected void onPause() {
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
}
}

person Piodo    schedule 25.11.2016    source источник
comment
Где ваш код получает обратный вызов маяка дальнего действия? Нам нужно посмотреть, как эти данные обрабатываются.   -  person davidgyoung    schedule 25.11.2016


Ответы (1)


Я решил эту проблему, определив уникальный диапазон, содержащий определенные идентификаторы для выбранного маяка.

beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", id1, id2, id3));

При работе с несколькими маяками я сканирую все маяки, а затем просто печатаю только те, чьи идентификаторы совпадают с маяками в SavedList.

Может быть, это поможет кому-то.

person Piodo    schedule 28.11.2016