2016-11-25 8 views
0

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

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

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

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

Вот мой класс с активностью, чтобы показать выбранные маяки:

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(); 
} 
} 
+0

Где ваш код получает ответный сигнал маякового маяка? Нам нужно посмотреть, как эти данные обрабатываются. – davidgyoung

ответ

0

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

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

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

Возможно, это поможет кому-то.