0
私のプロジェクトでAndroidビーコンライブラリ(AltBeacon SDK)を使用しています。私の要件は、いくつかのチェックイン通知を表示することですユーザーがビーコン範囲とチェックアウト通知を入力する場合ビーコンの範囲を終了するが、私は直面している問題は、通知を取得し続けている(つまり、複数の時間を呼び出したdidRangeBeaconsInRegion(コレクションビーコン、地域地域) 。この関数は、アプリケーションがビーコンの範囲に来たときに一度だけ呼び出す必要がありますか?なぜ、RangeBeaconsInRegionが複数回呼び出されましたか?
public class BeaconMonitoringService extends Service implements BootstrapNotifier, BeaconConsumer, RangeNotifier {
private static final String TAG = "BeaconMonitoringService";
private BeaconManager beaconManager;
@SuppressWarnings("unused")
private RegionBootstrap regionBootstrap;
@SuppressWarnings("unused")
private BackgroundPowerSaver backgroundPowerSaver;
private Region region;
@Override
public void onCreate() {
super.onCreate();
beaconSession = new BeaconSession(this);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().clear();
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
region = new Region("MyBeacon", Identifier.parse("0800200C9A66"), null, null);
regionBootstrap = new RegionBootstrap(this, region);
beaconManager.setBackgroundMode(true);
backgroundPowerSaver = new BackgroundPowerSaver(this);
beaconManager.bind(this);
}
@Override
public void didEnterRegion(Region region) {
try {
Log.d(TAG, "Did Enter Region.");
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
if (BuildConfig.DEBUG) Log.d(TAG, "Can't start ranging");
}
}
@Override
public void didExitRegion(Region region) {
try {
Log.d(TAG, "Did Exit Region");
} catch (RemoteException e) {
if (BuildConfig.DEBUG) Log.d(TAG, "Can't start ranging");
}
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
switch (state) {
case MonitorNotifier.INSIDE:
Log.d(TAG, "INSIDE");
didEnterInRegion = true;
break;
case MonitorNotifier.OUTSIDE:
Log.d(TAG, "OUTSIDE");
didEnterInRegion = false;
break;
default:
didEnterInRegion = false;
Log.d(TAG, "state" + state);
break;
}
}
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
for (Beacon beacon : beacons) {
if (beacon.getId1().equals(Identifier.parse("0800200C9A66")) && beacon.getDistance() < 1.0) {
sendNotification(beacon);
}
}
}
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addRangeNotifier(this);
try {
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
beaconManager.unbind(this);
super.onDestroy();
}
}
おかげ@デビッドは、私はAPIで構築された機能がいくつかあるかもしれないと思った同じロジックを実装しています。 – Gkapoor
もう1つの問題は、デバイスがビーコン範囲内にある間にdidExitRegionも呼び出されることです。 – Gkapoor
終了ビーコン範囲の通知を表示するにはどうすればよいですか? – Gkapoor