11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android 8.1 OreoのBluetooth関連の注意点

Posted at

まえがき

AOSP(Android Open Source Project)へのBluetooth関連のコミットを見ていたら
Androidの公式ドキュメントには記載されていないAndroid 8.1のBluetoothの動作を見つけたので紹介します。

スクリーンオフ中はフィルタ無しのBLEスキャンが停止する

AOSPへのコミット

コミットの内容

スクリーンがオフになった時にフィルタ無しのBLEスキャンが停止します。
スクリーンオンになるとBLEスキャンが再開しアプリケーションにスキャン結果が通知されます。

スクリーンオフ中もフィルタ無しBLEスキャンを開始することは出来ますが、スキャン結果が
アプリケーションに通知されるのは次回スクリーンオン時以降になります。

回避方法

BLEスキャンをかける時は、適切なフィルタを設定しましょう。
一部の古いAndroid端末では不具合によりBLEスキャンフィルタが機能しない機種があったため
スキャンフィルタを使わない実装をしている方は注意してください。
スキャンフィルタはBluetoothのチップで処理しているため、Bluetoothスタック等の相性により
以前はうまく動かないケースが過去にありました。
8.1以降に対応するAndroid端末ではさすがに解消されている可能性が高いので
スキャンフィルタを使う実装を行っても問題ないかと思います。

アプリがバックグラウンドになるとBLEスキャンモードが省電力モードになる

AOSPへのコミット

コミットの内容

アプリがバックグラウンド(non-foreground state)になるとBLEスキャンモードが
SCAN_MODE_LOW_POWERになります。SCAN_MODE_BALANCED、SCAN_MODE_LOW_LATENCYを想定した実装をしている方は注意してください。バックグラウンドになると勝手にBLEスキャン結果の通知が遅くなります。

回避方法

調査中です。フォアグラウンドサービスでスキャンしておくと良さそう??

おわりに

Android Marshmallowで入ったDoze機能、さらにNougatで入ったDeep-Doze、
Oreoではバックグラウンドの実行制限、位置情報の制限など、省電力に関する機能が色々とはいっています。
上記のコミットもその省電力対応の一貫と思われますが、開発者としては公式ドキュメントに注意点として
記載しておいて頂けると大変助かるなー、と思いました。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?