mas*_*rur 7 java android bluetooth ibeacon altbeacon
我正在使用AltBeacon库开发蓝牙应用程序.似乎BeaconManager每个应用程序只允许实例.我面临的问题是:我想要一个持续运行的后台服务,不断进行蓝牙测距并发送通知.如果我打开我的应用程序(将它带到前台)我就是暂停范围的服务.然后,前台活动将进行测距并在屏幕上显示内容.
问题是BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);活动和服务中的信标管理器(来自)是同一个实例.因此,当活动关闭时,beaconManager.unbind(this);将被调用并且服务中的范围通知程序不再触发.
是否有可能获得两个独立的信标管理器实例?如果没有,我如何在连续运行的服务和活动中进行测距?
RangingActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
...
regionEstimote = new Region("estimote", null, null, null);
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);
}
@Override
protected void onDestroy() {
super.onDestroy();
notificationManager.cancel(NOTIFICATION_ID);
//beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
....
});
try {
beaconManager.startRangingBeaconsInRegion(regionEstimote);
} catch (RemoteException e) {
Log.e(TAG, "RangingActivity", e);
}
}
Run Code Online (Sandbox Code Playgroud)
BeaconService.java
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(beaconHistory == null)
beaconHistory = new HashMap<Integer, Date>();
mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
beaconHistory = null;
mBeaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
mBeaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if(ActivityBase.isActivityVisible()) { //don't do ranging logic if any activity from my app is in the foreground
return;
}
...
}
});
try {
mBeaconManager.startRangingBeaconsInRegion(regionMint);
} catch (RemoteException e) {
Log.e(TAG, "BeaconService", e);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,自定义android.app.Application类非常有用。该BeaconManager是如此的唯一一个被允许同时存在一个单身。同样,Application该类在每个活动的Android应用程序中都有一个实例。如果你想要做的信标检测在Activity和Service同时,使用集中Application类做结合BeaconManager的回调,然后转发到这两个Activity和你的Service。
你可以看到结合的一个例子BeaconManager中的Application类,然后通过回调到Activity中参考应用在这里: https://github.com/AltBeacon/android-beacon-library-reference/blob/master/app/src/ main / java / org / altbeacon / beaconreference / BeaconReferenceApplication.java