AI グラスの種類によって機能が異なります。たとえば、すべての AI グラスは音声によるオーディオ体験を提供しますが、一部の AI グラスにはディスプレイも搭載されており、アプリで Jetpack Compose Glimmer で構築された UI を表示できます。
さまざまな AI グラス デバイスでシームレスなユーザー エクスペリエンスを実現するには、グラス用の Activity を計画して、さまざまなデバイスの機能をチェックします。このアプローチでは、特定のデバイスを対象とする複数のアクティビティではなく、動作を適応させる 1 つのアクティビティを構築できるため、開発が簡素化されます。
予測アクティビティのライフサイクルを理解する
AI グラス用に作成するアクティビティは、デバイス上で直接実行されるのではなく、ホストデバイス(ユーザーのスマートフォンなど)からデバイスに投影されます。この目的のために作成する専用のアクティビティは、予測アクティビティと呼ばれます。プロジェクション アクティビティのライフサイクルは、標準のアクティビティ ライフサイクルに基づいていますが、さまざまなタイプの AI グラスの機能をサポートするいくつかの重要な違いも含まれています。
以下に、キーイベントの内訳を示します。AI グラスに投影されるアクティビティに固有のインタラクションについては、コールアウトで示しています。
onCreate()- 投影されたアクティビティが作成されたときに呼び出されます。
- アプリの Jetpack Compose Glimmer UI やその他のコンポーネントをここで初期化します。
onStart()- 投影されたアクティビティが開始され、ユーザーがアプリを認識しているときに呼び出されます。
onResume()- 投影されたアクティビティがフォーカスを取り戻したときに呼び出されます。アクティビティがフォーカスされている間は、操作可能で、タッチパッドまたはボタンの入力を受け取ることができます。
- 以前に頭から外された(脱着された)メガネが再び装着されたときに呼び出されます。
onPause()onStop()onDestroy()- 投影されたアクティビティが破棄されようとしているときに呼び出されます。このメソッドが呼び出されると、アクティビティに関連付けられているすべてのリソースが解放されます。
表示状態がアクティビティのライフサイクルに及ぼす影響を理解する
標準の Activity では、デバイスの画面がオフになると、通常は onPause() または onStop() に移行して、ライフサイクル状態が変化します。一方、AI グラスのディスプレイがオンまたはオフになっても、投影されたアクティビティのライフサイクルは変化しません。この動作により、ディスプレイがオフの場合でも、投影されたアクティビティは Started または Resumed 状態のまま実行され、アプリの音声エクスペリエンスが中断されることはありません。
さまざまなシステム イベントやユーザー イベントによってトリガーされるその他のアクティビティ状態の変化は、通常どおりに動作します。
ユーザーの認識が予測されるアクティビティにどのように影響するかを把握する
ユーザーは、予測されたアクティビティが可視でなくても、そのアクティビティを認識できます。認識とは、ユーザーがアプリの体験を認識し、操作するためのあらゆる方法を指します。たとえば、次のような方法があります。
- 音声、音声フィードバック、その他の音のヒントを聞く。
- アプリがカメラやマイクにアクセスした場合のプライバシー インジケーターなど、ユーザー向けの LED をトリガーするアプリ アクション。
このような状況では、ユーザーはディスプレイを見ていなくても、AI グラスがアクティブで応答していることを認識できます。
- 予測されたアクティビティの
onStart()状態は、アクティビティがアクティブであることを意味します。 onResume()状態は、アクティビティが操作可能で、タッチパッド入力を受け取ることができるか、プライマリ入力ディスパッチを受け取っていることを意味します。
ユーザーがアプリを認識している限り、アクティビティはアクティブな状態を維持し、フォアグラウンドに留まります。システムが短時間で認識のシグナルを検出しない場合、システムはアクティビティをフォアグラウンドから削除し、最終的に onStop() をトリガーします。
予測アクティビティと予測コンテキストについて
AI グラスは、ユーザーのスマートフォンの機能を拡張する接続デバイスとして扱われます。投影コンテキストは、デバイス対応の Context です。アプリは、スマートフォンのハードウェアではなく、接続されたメガネ型デバイスのハードウェア(センサー、カメラ、マイクなど)とやり取りできます。AI グラス向けのエクスペリエンスを開発する場合、アプリは投影されたコンテキストを使用してグラスのハードウェアにアクセスする必要があります。
呼び出し元アクティビティのコンテキストに応じて、投影されたコンテキストがアプリに自動的に付与されることがあります。
プロジェクション アクティビティの場合: アプリのコードがプロジェクション アクティビティ内で実行されている場合、そのアクティビティのコンテキストはすでにプロジェクション コンテキストです。このシナリオでは、そのアクティビティ内で行われた呼び出しは、すでにメガネのハードウェアにアクセスできます。
電話アプリまたはサービスの場合: 投影されたアクティビティ以外のアプリの一部(電話アクティビティやサービスなど)がメガネのハードウェアにアクセスする必要がある場合は、投影されたコンテキストを明示的に取得する必要があります。これを行うには、
createProjectedDeviceContext()メソッドを使用します。
詳細については、投影されたコンテキストを使用して AI グラスのハードウェアにアクセスするをご覧ください。
デバイス対応 API について
一部の標準 Android API は、呼び出し元アクティビティの Context に応じて、アクセスするデバイスのハードウェアを変更します。これらの API が投影されたコンテキストを受け取ると、ホスト スマートフォン デバイスのハードウェアではなく、AI グラスのハードウェアにアクセスします。
CameraManager: グラスのカメラにアクセスします。SensorManager: グラスからセンサーデータ(ジャイロスコープや加速度計のデータなど)を取得します。AudioManager: メガネの音声ストリーム、音量、ルーティングを管理します。AudioRecord: メガネのマイクを使用して音声をキャプチャします。