使用 Altbeacon 检测信标列表
Detect list of beacon with Altbeacon
我正在尝试使用 Android 信标库获取附近信标的列表。我一直在关注这个sample,但作为一个新手,我发现它太复杂了。我不想检测背景中的信标,我不想检测区域条目……我只想拥有实际可见信标的列表。
在我的 MainActivity class 的 onCreate 方法中,我刚刚添加了这段代码,并希望这将启动测距或监控,但这并没有发生。有人知道问题是什么或如何使用这两个 classes 吗?
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
MonitoringActivity monitoringActivity = new MonitoringActivity();
RangingActivity rangingActivity = new RangingActivity();
}
@Override
如果您只想获取可见信标列表,则需要信标 "ranging"。您不需要使用示例中提到的两个单独的 Activity classes。您可以将 Ranging 示例的相关部分复制到您自己的 Activity 中。
所以这样做:
从您的 class 中删除对 MonitoringActivity
和 RangingActivity
的引用。
将以下内容添加到您的 class 中:
将您的 class 定义更改为:
public class MainActivity extends AppCompatActivity implements BeaconConsumer {
将以下代码添加到您的 onCreate
方法中:
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
// To detect proprietary beacons, you must add a line like below corresponding to your beacon
// type. Do a web search for "setBeaconLayout" to get the proper expression.
// beaconManager.getBeaconParsers().add(new BeaconParser().
// setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
beaconManager.bind(this);
将以下方法添加到您的class:
@Override
public void onBeaconServiceConnect() {
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon : beacons) {
Log.i("MainActivity", "I see a beacon that is about "+beacon.getDistance()+" meters away.");
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) { }
}
可见信标列表是在 for (Beacon beacon : beacons)
行内访问的内容。
我正在尝试使用 Android 信标库获取附近信标的列表。我一直在关注这个sample,但作为一个新手,我发现它太复杂了。我不想检测背景中的信标,我不想检测区域条目……我只想拥有实际可见信标的列表。 在我的 MainActivity class 的 onCreate 方法中,我刚刚添加了这段代码,并希望这将启动测距或监控,但这并没有发生。有人知道问题是什么或如何使用这两个 classes 吗?
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
MonitoringActivity monitoringActivity = new MonitoringActivity();
RangingActivity rangingActivity = new RangingActivity();
}
@Override
如果您只想获取可见信标列表,则需要信标 "ranging"。您不需要使用示例中提到的两个单独的 Activity classes。您可以将 Ranging 示例的相关部分复制到您自己的 Activity 中。
所以这样做:
从您的 class 中删除对
MonitoringActivity
和RangingActivity
的引用。将以下内容添加到您的 class 中:
将您的 class 定义更改为:
public class MainActivity extends AppCompatActivity implements BeaconConsumer {
将以下代码添加到您的 onCreate
方法中:
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
// To detect proprietary beacons, you must add a line like below corresponding to your beacon
// type. Do a web search for "setBeaconLayout" to get the proper expression.
// beaconManager.getBeaconParsers().add(new BeaconParser().
// setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
beaconManager.bind(this);
将以下方法添加到您的class:
@Override
public void onBeaconServiceConnect() {
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon : beacons) {
Log.i("MainActivity", "I see a beacon that is about "+beacon.getDistance()+" meters away.");
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) { }
}
可见信标列表是在 for (Beacon beacon : beacons)
行内访问的内容。