如果我使用我的 Android 设备进入信标区域,我希望显示通知。这在Android SDK 快速入门中有很好的记录
只要应用程序处于活动状态,这就是有效的。应用程序关闭时如何收到通知?
如果我使用我的 Android 设备进入信标区域,我希望显示通知。这在Android SDK 快速入门中有很好的记录
只要应用程序处于活动状态,这就是有效的。应用程序关闭时如何收到通知?
我自己建立一个服务:
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);
我对 kontakt.io 一无所知,但有一个用于 AltBeacon 的库和参考应用程序,它提供了此功能。 https://github.com/AltBeacon
我相信这是通用的 Android 功能,而不是它们的实现有什么魔力。
@erdna 您是否测试过示例 kontakt 管理应用程序?有一种方法,当应用程序在前台运行时出现 Toast,而当应用程序在后台运行时出现标准通知。
https://github.com/kontaktio/kontakt-beacon-admin-sample-app
@erdna我猜它应该IntentService
用于长时间运行的服务,将传入的信标事件作为方法中的意图进行监控onHandleIntent(Intent intent)
。@dawid-gdanski 我不确定您指的是哪个班级。