使用Android上的Altbeacon库刷新与所选iBeacon设备的距离

时间:2016-11-25 15:05:33

标签: java android altbeacon beacon

我想在选定的信标上显示来自AltBeacon库的getDistance()函数计算的当前距离。

例如,我在范围内有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();
}
}

1 个答案:

答案 0 :(得分:0)

我通过为所选信标定义包含特定ID的唯一范围来解决此问题

split

在处理多个信标时,我扫描所有信标,然后只打印那些ID与SavedList中的信标相同的信号。

也许它会帮助别人。