通常、Apple WatchアプリはスクリーンがオフされるとBluetooth通信ができなくなってしまいます。その件に関して対処方法含めて調べたことを解説します。
なお、ここでいうBluetooth通信には、Watch ConnectivityによるiOSデバイスとの通信も含まれます。本記事ではまとめてBluetooth通信と記載します。
watchOSのスクリーンがオフされた時の挙動
通常、次の手順でアプリの状態は変わります。
- アプリを起動
- Not running→Inactive→Active
- ユーザが腕を下ろす、もしくは一定時間放置
- Active→Inactive
- スクリーンがオフ
- (デフォルトで)2分経過する
- Inactive→Background
手順2の時点でBluetooth通信ができなくなります。
手順2の時点では、アプリの状態はInactiveになります。Inactiveはフォアグラウンド実行の状態でアプリは動作し続けていますが、Bluetoothの通信はできません。
フォアグラウンドとはいったい?と思いましたが、そういう仕様なので仕方ありません。
解決策は拡張ランタイムセッション
スクリーンがオフされてもBluetooth通信できる方法を公式ドキュメントで見つけることができました。それは拡張ランタイムセッション(Extended Runtime Sessions)です。
拡張ランタイムセッションとは、スクリーンがオフされてもBluetooth通信・データ処理・音声・触覚フィードバックを行うことができる機能です。watchOS6から追加された機能です。
使い方のイメージとしては、時間制限付きのセッションを作成し、そのセッションが生きている間は、スクリーンがオフされてもBluetooth通信を続けることができる、といった感じです。
詳しくは下記の記事にまとめていますので、ご参照ください。
【watchOS】拡張ランタイムセッションを解説【Extended Runtime Sessions】
WatchOS6.xでは、拡張ランタイムセッションを使うことで、Watch Connectivityの通信も可能でしたが、WatchOS7.0では通信できなくなりました。
(付録)シリーズ5以降ならスクリーンオフしないけど?
Apple Watch 5からスクリーンがオフされなくなりました。これならBluetooth通信できるのでは?と思いましたが、少し調べてみたところ、アプリの状態はActiveからInactiveに遷移しているようです。アプリの状態遷移は同じなので、Bluetooth通信も同じくできないだろうと思います。
手元にシリーズ5がなく動作確認していないので間違っていたらすみません。もし、5シリーズでの動作確認結果を知っている方がいらっしゃれば、情報提供いただけると幸いです。