2017-05-07 80 views
4

アクティブなBluetooth LEスキャナを搭載したアプリまたはサービスを実行し、ログコンソールにスキャン結果を表示しています。私はテーブルに電話をロックし、もはや触れていない場合。しばらくすると停止し、スキャン結果が増えません。Android Bluetooth Leスキャナが時間の経過後に停止する

電源ボタンを押して画面を起動すると、スキャン結果が増えます。私は再び画面をロックするか、自動的にロックを待つと停止し、より多くのスキャン結果を与えることはありません。

私はサービスでテストし、ログでさらに結果を得て、アプリが動作していることを確認しますが、スキャナLEが停止し、画面がロックされている間に結果が表示されません。

ドーズモードでは「最適化されたバッテリーなし」のアプリがあります。私は、電話とドーズモードを導入するコマンドで強制的にテストし、それは私にスキャン結果を与えるうまく動作します。

Android 7.1.1搭載のNexus 5では、APPを実行して画面をロックし、もはや携帯電話に触れることはありません。時間は30分です。携帯電話はテーブルの中だけにあり、マイクロソフトと接続してAndroidスタジオのログを見ることができます。

アンドロイド7.1を搭載した他のMoto G2では、正確に合格していますが、時間は20分から40分です。携帯電話はテーブルの中だけにあり、マイクロソフトと接続してAndroidスタジオのログを見ることができます。

もう一度うまく実行されているため、アプリを手動で強制終了して再起動する必要があります。そうしないと、画面がアクティブなときにのみ動作し、画面がロックされているときには結果が表示されません。

これはビーコンの結果に使用されます。まず、この目的でAndroidビーコンライブラリを使用します。結果は同じでした。

Androidビーコンライブラリと同じ結果があるか、自分のBLEスキャナを実装しているので、アンドロイドのBluetoothコンポーネントの問題だと思いますが、これを解決する方法がわかりません。

電話機がロック状態になっているときに、BluetoothスキャナーLEをAndroidで常に使用するためのフォームはありますか?

ありがとうございます。

よろしくお願いいたします。

+0

。しかし、私はextern警報を入れて、電話のロックを解除せずに10分ごとに電話機を動かすだけで、スクリーンがロックされてから30分後には、画面が読み込まれなくなります。 – Redhunt

+1

電話機に触れずにバックグラウンドモードですべてのテストを行った後、スキャナーを常に稼働させるためのフォームがありませんでした。 – Redhunt

答えて

8

Android 7.0では、30分以上実行されたスキャンが自動的に効果的に停止され、「機会主義的に」再開されるというBLEスキャンタイムアウトが導入されました。これは基本的に別のプロセスがスキャンを実行した場合でも同様です。

あなたは、Bluetooth LEをスキャンし、無期限に実行されているのまま起動するためのコードを設定することで、これを見ることができます。正確に30分後、スキャンが停止します、とあなたはLogCatにこのようなエントリが表示されます。

https://android.googlesource.com/platform/packages/apps/Bluetooth/+/android-7.0.0_r1/src/com/android/bluetooth/gatt/ScanManager.java#72

06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: clientIf set to scan opportunisticly: 6 
06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: configureRegularScanParams() - queue=1 
06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: configureRegularScanParams() - ScanSetting Scan mode=-1 mLastConfiguredScanSetting=2 
06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: configureRegularScanParams() - queue emtpy, scan stopped 
06-11 19:00:22.849 5123 5147 D BtGatt.ScanManager: stop scan 

はあなたがここにAOSPソースでこれを行うコードを見ることができますこれを回避するには、スキャンをそれほど長くしないようにします。単に停止して定期的に再起動することができます。私は電話で10分ごとにアラームを入れて、スキャナBLEは決して停止しない次の10分間、他のアラームを入れて画面をロックした場合

+0

本当にこの奇妙な新しい "機能"のポイントは何ですか? BLEデバイスのバックグラウンドで継続的にスキャンする必要のあるアプリがたくさんあります。この新しい「機能」は、これらのアプリを破壊します。 30分後、特にアプリがすでに「低消費電力」のスキャンモードを使用している場合は、スキャンを停止するだけでは非常に恣意的です。プログラマは、回避策として30分後にタイマを使用して再起動するだけです。 – Emil

+0

真。 1つの利点は、プログラマーが誤ってスキャンを残した場合にバッテリーを節約することです。 – davidgyoung

+0

@davidgyoung、あなたは私を助けて、私がgithub https://github.com/AltBeacon/android-beacon-library/issues/506に投稿したときに私の問題を解決しました。ご協力ありがとうございました。 – Redhunt

関連する問題