kontakt.io sdk 如何实现后台服务?
How do I implement background service for kontakt.io sdk?
如果我使用 Android 设备进入信标区域,我喜欢显示通知。 Android SDK Quickstart
中有详细记录
只要应用程序处于活动状态,它就可以正常工作。 如何在应用程序关闭时收到通知?
我对 kontakt.io 一无所知,但 AltBeacon 有一个库和参考应用程序提供此功能。 https://github.com/AltBeacon
我相信这是通用的 Android 功能,对它们的实现没有任何魔力。
我自己搭建一个服务:
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);
@erdna 你测试过示例 kontakt 管理应用程序了吗?有一种方法,当应用程序在前台时出现 Toasts,当应用程序在后台运行时出现标准通知。
https://github.com/kontaktio/kontakt-beacon-admin-sample-app
@erdna 我猜它应该是 IntentService
长 运行 服务,它在 onHandleIntent(Intent intent)
方法中监视传入的信标事件作为意图。 @dawid-gdanski 我不确定 class 你指的是什么。
如果我使用 Android 设备进入信标区域,我喜欢显示通知。 Android SDK Quickstart
中有详细记录只要应用程序处于活动状态,它就可以正常工作。 如何在应用程序关闭时收到通知?
我对 kontakt.io 一无所知,但 AltBeacon 有一个库和参考应用程序提供此功能。 https://github.com/AltBeacon
我相信这是通用的 Android 功能,对它们的实现没有任何魔力。
我自己搭建一个服务:
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);
@erdna 你测试过示例 kontakt 管理应用程序了吗?有一种方法,当应用程序在前台时出现 Toasts,当应用程序在后台运行时出现标准通知。
https://github.com/kontaktio/kontakt-beacon-admin-sample-app
@erdna 我猜它应该是 IntentService
长 运行 服务,它在 onHandleIntent(Intent intent)
方法中监视传入的信标事件作为意图。 @dawid-gdanski 我不确定 class 你指的是什么。