如果我使用Android设备进入信标区域,我想显示通知。这在Android SDK Quickstart
有很好的记录只要应用处于活动状态,这只会正常工作。 如何在应用关闭时收到通知?
答案 0 :(得分:3)
我自己建立了一项服务:
<强> BeaconRangingService.java 强>
public class BeaconRangingService extends Service {
private static final String TAG = BeaconRangingService.class.getSimpleName();
private BeaconManager beaconManager;
@Override
public void onCreate() {
super.onCreate();
beaconManager = BeaconManager.newInstance(getApplicationContext());
beaconManager.setMonitorPeriod(MonitorPeriod.MINIMAL);
beaconManager.setForceScanConfiguration(ForceScanConfiguration.DEFAULT);
beaconManager.registerMonitoringListener(new BeaconManager.MonitoringListener() {
@Override
public void onMonitorStart() {
Log.v(TAG, "start monitoring beacons");
}
@Override
public void onMonitorStop() {
Log.wtf(TAG, "stop monitoring beacons");
}
@Override
public void onBeaconsUpdated(Region region, List<Beacon> list) {
}
@Override
public void onBeaconAppeared(Region region, Beacon beacon) {
Toast.makeText(getApplicationContext(), "Beacon appeared\n BEACON ID: " + beacon.getBeaconUniqueId(), Toast.LENGTH_SHORT).show();
}
@Override
public void onRegionEntered(Region region) {
}
@Override
public void onRegionAbandoned(Region region) {
}
});
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v(TAG, "service started");
if (!beaconManager.isBluetoothEnabled()) {
Log.w(TAG, "bluetooth disabled, stop service");
stopSelf();
} else {
connect();
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Log.v(TAG, "service destroyed");
beaconManager.stopMonitoring();
beaconManager.disconnect();
beaconManager = null;
super.onDestroy();
}
private void connectBeaconManager() {
try {
beaconManager.connect(new OnServiceBoundListener() {
@Override
public void onServiceBound() {
try {
HashSet<Region> regions = new HashSet<>();
regions.add(Region.EVERYWHERE);
beaconManager.startMonitoring(regions);
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
} catch (RemoteException e) {
throw new IllegalStateException(e);
}
}
}
<强>的AndroidManifest.xml 强>
<service
android:name="com.your.package.BeaconRangingService"
android:exported="false"/>
开始服务
Intent intent = new Intent(this, BeaconRangingService.class);
startService(intent);
答案 1 :(得分:1)
我对kontakt.io一无所知,但有一个AltBeacon的库和参考应用程序提供此功能。 https://github.com/AltBeacon
我相信这是一般的Android功能,并不是他们实现的任何魔力。
答案 2 :(得分:0)
@erdna你测试了样本kontakt管理员应用程序吗?有一种方法可以在应用程序处于前台时显示Toasts,并在应用程序在后台运行时显示标准通知。
https://github.com/kontaktio/kontakt-beacon-admin-sample-app
答案 3 :(得分:0)
@erdna我想对于长期运行的服务应该是offset
,它将传入的信标事件作为bool A::sortByCoordinates(const A& a, const A& b)
{
// get stripe numbers, assuming A::y to be positive int
int stripeA = a.y / offset; // be careful if a.y can be negative!
int stripeB = b.y / offset;
if (stripeA != stripeB)
return stripeA < stripeB;
return a.x < b.x;
}
方法中的意图进行监视。 @ dawid-gdanski我不确定你引用什么课。