在 Android 上使用 Altbeacon 库刷新到所选 iBeacon 设备的距离
Refresh distance to selected iBeacon device using Altbeacon library on Android
我想在所选信标上显示 AltBeacon 库中 getDistance() 函数计算的当前距离。
例如,我在范围内有 3 个信标,其中 2 个保存在 SavedBeacons 中 - 这是信标对象的集合。有用户从 public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region)
功能中选择的信标。
我想显示它们(仅选定的),并在它们当前距离上自动更新 1 秒。
现在输出只是信标信息和我将其添加到 SavedBeacons 集合时保存的距离。它的距离没有更新。
这是我的 class 和 activity 以显示选定的信标:
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();
}
}
我已经通过为选定的信标定义包含特定 ID 的唯一范围解决了这个问题
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", id1, id2, id3));
在使用多个信标时,我扫描所有信标,然后仅打印 ID 与 SavedList 中的信标相同的信标。
也许它会对某人有所帮助。
我想在所选信标上显示 AltBeacon 库中 getDistance() 函数计算的当前距离。
例如,我在范围内有 3 个信标,其中 2 个保存在 SavedBeacons 中 - 这是信标对象的集合。有用户从 public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region)
功能中选择的信标。
我想显示它们(仅选定的),并在它们当前距离上自动更新 1 秒。
现在输出只是信标信息和我将其添加到 SavedBeacons 集合时保存的距离。它的距离没有更新。
这是我的 class 和 activity 以显示选定的信标:
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();
}
}
我已经通过为选定的信标定义包含特定 ID 的唯一范围解决了这个问题
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", id1, id2, id3));
在使用多个信标时,我扫描所有信标,然后仅打印 ID 与 SavedList 中的信标相同的信标。
也许它会对某人有所帮助。