ライブラリは正しくスキャンを続けますが、このモードではビーコンは検出されません。AltBeaconは、アプリケーションが閉じられたときにビーコンを検出しません。
私は多くの場所で読んでいますが、これが可能かどうかは非常に異なる意見です。 (私はそれがあると思いたい)
IOS
で
、ネイティブSDKを使用して、この同じ実装では、任意の不便なしで実装することができ、それはアンドロイドで少しトリッキーなようです。
フォアグラウンドとバックグラウンドが適切な場合に動作します。
これは私のbeaconManager
構成です:込み
public void setUpBeaconManager() throws RemoteException {
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(MainActivity.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,d:25-25"));
beaconManager.setBackgroundBetweenScanPeriod(2000);
beaconManager.setForegroundBetweenScanPeriod(2000);
beaconManager.updateScanPeriods();
beaconManager.bind(MainActivity.this);
}
}
@Override
public void onBeaconServiceConnect() {
Log.e(Tags.MAIN_ACTIVITY, "Beacon "+beaconManager.checkAvailability());
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Beacon firstBeacon = beacons.iterator().next();
if (finishedRequest) {
Log.e("", "beacon id1: " + firstBeacon.getId1());
processDetectBeacons(firstBeacon.getId2().toInt(), firstBeacon.getId3().toInt());
}
Log.e(Tags.MAIN_ACTIVITY, "Beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters away.");
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {beaconManager.unbind(this);}
}
私が読ん用BootstrapNotifier
public class ApplicationManager extends Application implements BootstrapNotifier
public void onCreate() {
super.onCreate();
initRegionBootstrap();
}
private void initRegionBootstrap() {
Log.d("RegionBootstrap", "Init RegionBootstrap functionality!!!");
Region region = new Region("xxxx-4xx2-4E98-xxx-Bx5B7xxxx893E", Identifier.parse("xxxx-4xx2-4E98-xxx-Bx5B7xxxx893E"), null, null);
regionBootstrap = new RegionBootstrap(this, region);
}
@Override
public void didEnterRegion(Region region) {
Log.d("", "didEnterRegion: " + region);
}
@Override
public void didExitRegion(Region region) {
Log.d("", "didExitRegion");
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
Log.d("", "didDetermineStateForRegion");
}
感謝を実装してみてください、私はあなたが助けることができると思います。
BootstrapNotifierを使用する必要があります。 ApplicationManagerのonCreate()メソッドを表示できますか? – davidgyoung
@davidgyoungは 'onCreate()'メソッドを追加しました – jose920405