AltBeaconライブラリのドキュメントで私が理解していることから、ScanJobは、アプリケーションとの最後の対話の15分後に呼び出しが停止するはずです。
一部のリージョンの監視と範囲設定を開始し、すべてのビーコンを無効にしたため、ビーコンが正常に検出されません。アプリケーションを起動した後、アプリケーションを強制終了しました。ログキャットで、15分後でもScanJobが継続的に呼び出されていることがわかります。
03-22 14:17:46.047 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:17:46.061 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:17:46.061 10755-10755 W/JobInfo: Specified interval for 208352940 is +5m10s0ms. Clamped to +15m0s0ms
03-22 14:17:46.061 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:17:46.061 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m10s0ms. Clamped to +15m0s0ms
03-22 14:17:46.062 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:17:46.178 10755-10755/ I/CycledLeScanner: Using Android O scanner
03-22 14:17:46.180 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:17:46.180 10755-10755/ I/ScanJob: Running immediate scan job: instance is org.altbeacon.beacon.service.ScanJob@6c0d823
03-22 14:17:46.181 10755-10755/ I/ScanJob: scanJob version 2.13.1 is starting up on the main process
03-22 14:17:46.184 10755-10755/ W/ModelSpecificDistanceCalculator: Cannot find match for this device. Using default
03-22 14:17:46.184 10755-10755/ W/ModelSpecificDistanceCalculator: Cannot find match for this device. Using default
03-22 14:17:46.184 10755-10755/ I/BluetoothAdapter: getBluetoothLeScanner
03-22 14:17:46.234 10755-10755/ D/BluetoothAdapter: isLeEnabled(): ON
03-22 14:17:46.244 10755-10755/ I/BluetoothAdapter: getBluetoothLeScanner
03-22 14:17:46.246 10755-12617/ D/BluetoothAdapter: isLeEnabled(): ON
03-22 14:17:46.250 10755-10755/ I/ScanJob: Scan job running for 10000 millis
03-22 14:17:46.250 10755-11219/ D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=6 mScannerId=0
03-22 14:17:46.725 10755-12622/ I/ScanHelper: Non-distinct packets detected in a single scan. Restarting scans unecessary.
03-22 14:17:56.251 10755-10755/ I/ScanJob: Scan job runtime expired: org.altbeacon.beacon.service.ScanJob@6c0d823
03-22 14:17:56.262 10755-12617/ D/BluetoothAdapter: isLeEnabled(): ON
03-22 14:17:56.299 10755-10755/ I/BluetoothAdapter: getBluetoothLeScanner
03-22 14:17:56.302 10755-10755/ D/BluetoothAdapter: isLeEnabled(): ON
03-22 14:17:56.533 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:17:56.542 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:17:56.542 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m10s0ms. Clamped to +15m0s0ms
03-22 14:17:56.542 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:17:56.542 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m10s0ms. Clamped to +15m0s0ms
03-22 14:17:56.542 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:17:56.663 10755-10755/ I/CycledLeScanner: Using Android O scanner
03-22 14:17:56.666 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:17:56.667 10755-10755/ I/ScanJob: Running immediate scan job: instance is org.altbeacon.beacon.service.ScanJob@ab5d8a
03-22 14:17:56.668 10755-10755/ I/ScanJob: scanJob version 2.13.1 is starting up on the main process
03-22 14:17:56.669 10755-10755/ W/ModelSpecificDistanceCalculator: Cannot find match for this device. Using default
03-22 14:17:56.670 10755-10755/ W/ModelSpecificDistanceCalculator: Cannot find match for this device. Using default
03-22 14:17:56.671 10755-10755/ I/BluetoothAdapter: getBluetoothLeScanner
03-22 14:17:56.718 10755-10755/ D/BluetoothAdapter: isLeEnabled(): ON
03-22 14:17:56.730 10755-10755/ I/BluetoothAdapter: getBluetoothLeScanner
03-22 14:17:56.733 10755-12627/ D/BluetoothAdapter: isLeEnabled(): ON
03-22 14:17:56.739 10755-10755/ I/ScanJob: Scan job running for 10000 millis
03-22 14:17:56.739 10755-11219/ D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=6 mScannerId=0
電話を操作しておらず、監視対象の地域に一致するビーコンがない場合、15分後に停止するべきではありませんか?
また、ビーコンを接続すると検出されますが、ScanJobは呼び出しを停止します。
03-22 14:19:55.150 10755-10755/ D/.MyApplication: I have just switched from seeing/not seeing beacons: 1
03-22 14:19:55.152 10755-10755/ D/.MyApplication: did enter Bootstrap region.id1: 0040c159-12f6-4fc3-9189-87c069ffe5cf id2: 5 id3: null
03-22 14:19:55.152 10755-10755/ D/.MyApplication: isAnyConsumerBound? -->false
03-22 14:19:55.186 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.188 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.189 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.189 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.189 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.189 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.232 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.233 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.234 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.234 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.234 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.234 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.276 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.278 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.278 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.278 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.278 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.278 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.321 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.322 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.323 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.323 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.323 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.323 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.368 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.369 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.369 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.369 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.369 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.369 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.412 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.413 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.414 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.414 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.414 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.414 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.468 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.469 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.470 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.470 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.470 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.470 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.527 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.529 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.529 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.529 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.529 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.529 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.584 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.585 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.586 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.586 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.586 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.586 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.638 10755-10755/ I/ScanJob: Using immediateScanJobId from manifest: 208352939
03-22 14:19:55.639 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.639 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.639 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.640 10755-10755/ W/JobInfo: Specified interval for 208352940 is +5m0s0ms. Clamped to +15m0s0ms
03-22 14:19:55.640 10755-10755/ W/JobInfo: Specified flex for 208352940 is 0. Clamped to +5m0s0ms
03-22 14:19:55.659 10755-10755/ I/ScanJob: Using periodicScanJobId from manifest: 208352940
03-22 14:19:55.659 10755-10755/ I/ScanJob: onStopJob called for immediate scan org.altbeacon.beacon.service.ScanJob@e0ea913
03-22 14:19:55.663 10755-12713/ D/BluetoothAdapter: isLeEnabled(): ON
03-22 14:19:55.664 10755-10755/ I/ScanJob: We are inside a beacon region. We will not scan between cycles.
これは予想される動作ですか?何かを誤って構成した可能性がありますか?
編集してコードと情報を追加します
私が試しているのは、アクティビティにバインドされていない連続バックグラウンドスキャンを実行することです。そのため、レンジングとモニタリングを開始するために必要なすべてのコードをMyApplication
、から拡張するクラスに配置しましたApplication
。
@Override
public void onCreate() {
if (Utils.checkPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
beaconManager = BeaconManager.getInstanceForApplication(this);
initBeaconParsers(); //In this method I add some custo beacon parsers
//wake up the app when any beacon is seen
List<Region> regions = setupBeaconRegions();
regionBootstrap = new RegionBootstrap(this, regions);
backgroundPowerSaver = new BackgroundPowerSaver(this);
beaconManager.setBackgroundScanPeriod(3000l);
beaconManager.setBackgroundBetweenScanPeriod(15000l);
beaconManager.setRegionStatePersistenceEnabled(false);
beaconManager.bind(this);
}
}
private List<Region> setupBeaconRegions(){
List<Region> regions = new ArrayList<>();
region = new Region(Constants.REGION, Identifier.parse(BuildConfig.UUID_1), null, null);
region2= new Region(Constants.REGION_2, Identifier.parse(BuildConfig.UUID_2), null, null);
region3= new Region(Constants.REGION_3, Identifier.parse(BuildConfig.UUID_3), null, null);
region4 = new Region(Constants.REGION_4, Identifier.parse(BuildConfig.UUID_4), null, null);
region5= new Region(Constants.REGION_5, Identifier.parse(BuildConfig.UUID_5), null, null);
pushRegion = new Region(Constants.PUSH_REGION, Identifier.parse(BuildConfig.PUSH_UUID_1), null, null);
pushRegion2= new Region(Constants.PUSH_REGION_2, Identifier.parse(BuildConfig.PUSH_UUID_2), null, null);
pushRegion3= new Region(Constants.PUSH_REGION_3, Identifier.parse(BuildConfig.PUSH_UUID_3), null, null);
pushRegion4= new Region(Constants.PUSH_REGION_4, Identifier.parse(BuildConfig.PUSH_UUID_4), null, null);
pushRegion5= new Region(Constants.PUSH_REGION_5, Identifier.parse(BuildConfig.PUSH_UUID_5), null, null);
regions.add(region);
regions.add(region2);
regions.add(region3);
regions.add(region4);
regions.add(regio5);
regions.add(pushRegion);
regions.add(pushRegion2);
regions.add(pushRegion3);
regions.add(pushRegion4);
regions.add(pushRegion5);
return regions;
}
@Override
public void didEnterRegion(Region region) {
Log.d(TAG, "did enter Bootstrap region." + region);
startRangingBeacons();
}
private void startRangingBeacons(){
if (!isBeaconScanInitialized && !beaconManager.isAnyConsumerBound()) {
try {
Log.d(TAG, "isAnyConsumerBound? -->" + beaconManager.isAnyConsumerBound());
beaconManager.startRangingBeaconsInRegion(region);
beaconManager.startRangingBeaconsInRegion(region2);
beaconManager.startRangingBeaconsInRegion(region3);
beaconManager.startRangingBeaconsInRegion(region4);
beaconManager.startRangingBeaconsInRegion(region5);
beaconManager.startRangingBeaconsInRegion(pushRegion);
beaconManager.startRangingBeaconsInRegion(pushRegion2);
beaconManager.startRangingBeaconsInRegion(pushRegion3);
beaconManager.startRangingBeaconsInRegion(pushRegion4);
beaconManager.startRangingBeaconsInRegion(pushRegion5);
isBeaconScanInitialized = true;
} catch (RemoteException e) {
Log.d(TAG, e.getMessage());
}
}
}
@Override
public void didExitRegion(Region region) {
Log.d(TAG, "didExitRegion-->" + region.getUniqueId() + " - " + region.getId1() + " - " + region.getId2() + " - " + region.getId3());
//Here is some custom code to deal on region exit
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.d(TAG,"I have just switched from seeing/not seeing beacons: " + state);
}
@Override
public void onBeaconServiceConnect() {
Log.d(TAG, "onBeaconServiceConnect");
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> arg0, Region arg1) {
// Some code to deal ranging
}
});
startRangingBeacons();
}
ビーコンをオンにして最初に検出されたときに電話がかかってきたので、監視は正常に機能しているようです。しかし、電話を起こすまでレンジングは呼び出されません。
ご迷惑をおかけして申し訳ありません。スキャンが予期しない間隔で発生する原因は正確にはわかりませんが、ダブルバインディングに関係しているのではないかと思います。
いくつかのヒント:
リージョンブートストラップを使用する場合は、内部でバインドするため、手動でバインドしないでください。削除する:
beaconManager.bind(this);
また、次のメソッドを削除して、範囲通知機能の設定をonCreateに移動します
onBeaconServiceConnect
RegionBootstrapを介してバインドする前に、構成の変更を設定する必要があります。したがって、これらの行をその行の上に移動します。
beaconManager.setBackgroundScanPeriod(3000l);
beaconManager.setBackgroundBetweenScanPeriod(15000l);
beaconManager.setRegionStatePersistenceEnabled(false);
上記のバックグラウンドスキャン期間は、スキャン期間がオペレーティングシステムによって最大15秒にクランプされるバックグラウンドのAndroid8では尊重できないことを理解してください。一度に3秒以上バックグラウンドでスキャンします。デフォルトの10秒を維持することを検討してください。
最新のライブラリバージョンにはバグがあり、そのプラットフォームでの信頼性が低くなるため、Android 8でisAnyConsumerBound()メソッドを使用することは避けてください。(バグは修正され、次のリリースを待っています。)とにかく、このロジックは必要ないはずであり、ステートメントのロジックがなくてもすぐに安全にレンジングを開始できます。
レンジングでは、バックグラウンドスキャン期間の終了時に1回のコールバックしか提供されないことを理解してください。したがって、適切に設定されている場合は、バックグラウンドで15分ごとに1つのレンジングコールバックを受け取ります。
Android 8のバックグラウンドで常時スキャンが必要な場合は、フォアグラウンドサービスの作成を検討してください。1つ持つだけで、アプリを無期限に実行し続ける機能のロックが解除されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加