Android 信标库 - 开始测距的最少步骤
Android beacon library - minimum steps to start ranging
我想在我的应用程序中添加最简单的程序。该程序应仅在单击对话框选项后获取信标信息,我多次尝试编写代码但没有得到开始测距所需的最少步骤是多少。
public class SecondClass extends Activity implements BeaconConsumer {
private BeaconManager beaconManager;
protected static final String TAG = "RangingActivity";
RegionBootstrap regionBootstrap;
Region region;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
region = new Region("backgroundRegion", null, null, null);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(101); //closes notification
//opens the alert dialog
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(this);
}
builder.setTitle("Send data")
.setMessage("Are you sure you want to send your data to the server?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// if yes was pressed, send the data
try {
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
Log.d(TAG, "Can't start ranging");
}
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// if cancel was pressed, do nothing
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");
}
}
});
}
}
谁能解释一下 onBeaconServiceConnect 是如何运行的?我是否需要在开始测距之前进行监控过程,检查是否有信标以及是否有信标才能开始测距,或者只需要一个程序就可以测距?
我尝试按照 Android Beacon Library 示例代码部分中的描述进行操作,但没有成功
此致
编辑
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
将这些权限添加到代码中,但仍然不起作用
我做的另一件事是使用 here(第二个投票最多的答案)
中描述的功能检查是否启用了 ACCESS_COARSE_LOCATION
自己测距就可以了。
onBeaconServiceConnect 是在您调用 beaconManager.bind(this); 之后信标扫描服务准备就绪时进行的回调。回调表明您已准备好开始测距或监控。确保您收到此回调。
确保您可以检测到与 BeaconScope 等现成信标检测相同的信标:https://play.google.com/store/apps/details?id=com.davidgyoungtech.beaconscanner&hl=en_US
如果使用 iBeacon、Eddystone 或自定义信标格式。确保您已注册正确的 BeaconParser 以使用该库。这是 iBeacon 的代码:beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
Eddystone 有不同的布局。
如果您在 Android 6+ 上进行测试,请确保您已通过编程方式请求并获得用户的位置权限,否则检测将阻止。 http://altbeacon.github.io/android-beacon-library/requesting_permission.html
确保蓝牙已打开,已为 phone。
启用定位
如果在 Android 10+ 上,请确保您已获得 FINE_LOCATION 许可,因为 COARSE_LOCATION 不再足够。
问题是:在示例代码中我认为它已经为 iBeacons 指定了,所以我保持原样...更改为
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
为我正在使用的信标工作
我想在我的应用程序中添加最简单的程序。该程序应仅在单击对话框选项后获取信标信息,我多次尝试编写代码但没有得到开始测距所需的最少步骤是多少。
public class SecondClass extends Activity implements BeaconConsumer {
private BeaconManager beaconManager;
protected static final String TAG = "RangingActivity";
RegionBootstrap regionBootstrap;
Region region;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
region = new Region("backgroundRegion", null, null, null);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(101); //closes notification
//opens the alert dialog
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(this);
}
builder.setTitle("Send data")
.setMessage("Are you sure you want to send your data to the server?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// if yes was pressed, send the data
try {
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
Log.d(TAG, "Can't start ranging");
}
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// if cancel was pressed, do nothing
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");
}
}
});
}
}
谁能解释一下 onBeaconServiceConnect 是如何运行的?我是否需要在开始测距之前进行监控过程,检查是否有信标以及是否有信标才能开始测距,或者只需要一个程序就可以测距?
我尝试按照 Android Beacon Library 示例代码部分中的描述进行操作,但没有成功
此致
编辑
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
将这些权限添加到代码中,但仍然不起作用
我做的另一件事是使用 here(第二个投票最多的答案)
中描述的功能检查是否启用了 ACCESS_COARSE_LOCATION自己测距就可以了。
onBeaconServiceConnect 是在您调用 beaconManager.bind(this); 之后信标扫描服务准备就绪时进行的回调。回调表明您已准备好开始测距或监控。确保您收到此回调。
确保您可以检测到与 BeaconScope 等现成信标检测相同的信标:https://play.google.com/store/apps/details?id=com.davidgyoungtech.beaconscanner&hl=en_US
如果使用 iBeacon、Eddystone 或自定义信标格式。确保您已注册正确的 BeaconParser 以使用该库。这是 iBeacon 的代码:
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
Eddystone 有不同的布局。如果您在 Android 6+ 上进行测试,请确保您已通过编程方式请求并获得用户的位置权限,否则检测将阻止。 http://altbeacon.github.io/android-beacon-library/requesting_permission.html
确保蓝牙已打开,已为 phone。
启用定位
如果在 Android 10+ 上,请确保您已获得 FINE_LOCATION 许可,因为 COARSE_LOCATION 不再足够。
问题是:在示例代码中我认为它已经为 iBeacons 指定了,所以我保持原样...更改为
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
为我正在使用的信标工作