Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

ハプティクスの実装

デバイス メーカーは通常、デバイスごとに作成されたプライベート アセットの所有者とみなされます。したがって、エンジニアリングの取り組みは多くの場合、デバイス単位で注力します。エコシステム内の他のデバイスとの一貫性にはほとんど注力しません。

これとは正反対に、デベロッパーは各デバイスの技術仕様に関係なく、エコシステム内のすべての Android スマートフォンで動作するアプリを作成することを目指します。このようなアプローチの違いにより、断片化の問題が発生することがあります。たとえば、特定のスマートフォンのハードウェア機能が、アプリ デベロッパーの想定と一致しないことがあります。そのため、一部の Android スマートフォンで動作するハプティクス API が他の Android スマートフォンでは動作しない場合、結果として一貫性のないエコシステムとなります。こうした理由により、メーカーが Android ハプティクス API をすべてのデバイスに実装できるようにする際、ハードウェア構成が重要な役割を果たします。

このページでは、Android ハプティクス API を活用するために、ハードウェア コンプライアンスを設定するためのチェックリストを示します。

下図は、デバイス メーカーとデベロッパーの間で共通の知識を構築する様子を示しています。これは、一貫性のあるエコシステムを構築するうえで重要なステップです。

知識の構築

図 1. デバイス メーカーとデベロッパーの間の知識の構築

ハプティクス実装チェックリスト

  1. 定数を実装する

    • ハプティクスを実装する定数のリスト。
  2. HAL と API の間で定数をマッピングする

    • 公開 API 定数(フレームワークの名前付きプレースホルダ)と、プレースホルダを実装する HAL 定数との間のマッピングの推奨事項。
    • このプロセスについて詳しくは、推奨されるマッピングの指針となる設計原則をご覧ください。
  3. ハードウェアを評価する

    • ターゲットとする触覚効果についての説明。これにより、ハードウェアのクイック チェックを行います。

以降で、各ステップについて詳しく説明します。

注: デバイス メーカーとデベロッパーの間の共通知識の構築について詳しくは、高度なハプティクス: ハプティクス API を使用するタイミング、内容、方法をご覧ください。

ステップ 1: 定数を実装する

こうした確認を行うことで、ハプティクスを実装する最小要件をデバイスが満たしているかどうかを確認します。

触覚定数

図 2. 定数の実装

下記の公開触覚定数の実装ステータスを確認します。

触覚定数 場所と概要
CLOCK_TICKCONTEXT_CLICKKEYBOARD_PRESSKEYBOARD_RELEASEKEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END HapticFeedbackConstants クラス
HapticFeedbackConstants の触覚定数は、performHapticFeedback() が呼び出す KEYBOARD_PRESSKEYBOARD_RELEASE など、特定の UI 要素での入力イベントを支援します。
EFFECT_TICKEFFECT_CLICKEFFECT_HEAVY_CLICKEFFECT_DOUBLE_CLICK VibrationEffect クラス
VibrationEffect の触覚定数には、入力イベントの概念が含まれず、UI 要素もありません。定数には、createPredefined() が呼び出す EFFECT_CLICKEFFECT_HEAVY_CLICK など、エネルギー レベルの概念が含まれます。
PRIMITIVE_TICKPRIMITIVE_CLICK VibrationEffect.Composition クラス
VibrationEffect.Composition の触覚定数は、addPrimitive(int primitiveId, float scale, int delay) が呼び出すスケーラブルな強度を持つことができます。

ステップ 2: HAL と API の間で定数をマッピングする

このステップでは、公開 HAL 定数と API 定数の間の推奨されるマッピングを示します。マッピングは、2 つの異なるデフォルト モデルによって支援されます。

  • 非連続モデル(簡単)

    • このモデルの主な変数は振幅です。HAL の各エンティティは異なる触覚振幅を表します。
    • このモデルは、基本的な触覚 UX を実装するために必要な最小要件です。
    • 高度な触覚 UX には、高度なハードウェアと高度なモデル(連続モデル)が必要です。
  • 連続モデル(高度)

    • このモデルの主な変数はテクスチャと振幅です。HAL の各エンティティは異なる触覚テクスチャを表します。各 HAL エンティティの振幅は、スケール係数(S)によって制御されます。
    • このモデルには高度なハードウェアが必要です。OEM が VibrationEffect.Composition で高度な触覚 UX を使用する場合(最新のハプティクス API を活用する場合)は、このモデルを使用してハードウェアを実装することをおすすめします。

非連続モデル

API で提供されるすべてのパブリック定数を、適切な HAL 定数にマッピングすることをおすすめします。このプロセスを開始するには、デバイスが HAL で定義できる、非連続の振幅を持つ触覚波形の数を確認します。この概念に基づいた具体的な質問は次のようになります。「1 台のスマートフォンに、人間が知覚できる振幅差を持つシングル インパルス触覚衝撃をいくつ定義できますか?」この質問に対する回答によってマッピングが決まります。

HAL 定数の定義はハードウェアに依存するプロセスです。たとえば、エントリー レベルのスマートフォンには、単一の触覚波形を生成するハードウェア機能しかないことがあります。より高度なハードウェア コンポーネントを備えたデバイスでは、より広範囲な非連続の振幅レベルが生成され、HAL で複数の触覚波形を定義できます。HAL - API 定数マッピングでは、HAL 定数を(中程度の振幅をベースラインに)使用して、より強い、または弱い効果を合成します。

効果の強弱

図 3. 振幅による HAL 定数の範囲

非連続の振幅を持つ HAL 定数の数を定義したら、HAL 定数と API 定数を HAL 定数の数でマッピングします。このマッピング プロセスでは、シングル インスパルス API 定数を、最大 3 つの振幅レベルの非連続なグループに分割できます。API 定数をセグメント化する方法は、付随する入力イベントの UX 原則に基づきます。詳しくは、ハプティクス UX デザインをご覧ください。

マッピング

図 4. HAL - API 定数マッピング: 非連続モデル

デバイスが、非連続の振幅を持つ 2 つの HAL 定数のみをサポートしている場合は、中振幅レベルと高振幅レベルの HAL 定数を統合することを検討してください。この概念の実例としては、EFFECT_CLICKEFFECT_HEAVY_CLICK を同じ HAL 定数(中振幅レベルの HAL 定数)にマッピングすることが挙げられます。デバイスが、非連続の振幅を持つ 1 つの HAL 定数のみをサポートしている場合は、3 つのレベルをすべて 1 つに統合することをご検討ください。

連続モデル

振幅スケーラビリティがある連続モデルは、HAL 定数を定義するために適用できます。スケール係数(S)を HAL 定数(HAL_H0HAL_H1 など)に適用して、スケールされた HAL(HAL_H0 × S)を生成できます。この場合、図 7 に示すように、スケールされた HAL は API 定数(HAL_H0 × S1 = H0S1 = EFFECT_TICK)を定義するためにマッピングされます。連続モデルの振幅スケーラビリティを使用することで、デバイスは固有のテクスチャを持つ少数の HAL 定数を格納でき、スケール係数(S)を調整することで振幅の変動を追加できます。デバイス メーカーは、提供するさまざまな触覚テクスチャの数に基づいて HAL 定数の数を定義できます。

定数の範囲

図 5. テクスチャ(HAL_H0)と振幅スケール(S)による HAL 定数の範囲

定数マッピング

図 6. HAL - API 定数マッピング: 連続モデル

連続モデルでは、異なる HAL 定数は、異なる振幅ではなく、異なる触覚テクスチャを表します。スケール係数(S)で振幅を設定できます。ただし、テクスチャの認識(シャープネスなど)は期間と振幅の認識に関係するため、テクスチャとスケール係数を組み合わせることをおすすめします(HAL - API マッピングの設計プロセス)。

図 7 は、振幅スケーラビリティによって 1 つの HAL から多くの API 定数まで変動を増やす定数マッピングを示しています。

変動増加 1

変動増加 2

図 7. 振幅スケーラビリティによる変動の増加

注: 上図は定数マッピングの特定のインスタンスを示しているため、命名規則は仮定のものです。この処理はデバイス メーカーごとに異なります。

スケーラブルな API 定数(VibrationEffect.CompositionPRIMITIVE_TICKPRIMITIVE_CLICK など)はすべて、API 定数が addPrimitive(int primitiveID, float scale, int delay) を通じて宣言されている場合、API 定数のエネルギー レベルが float scale パラメータによって異なります。PRIMITIVE_TICKPRIMITIVE_CLICK は、異なる HAL 定数を使用することで明確に区別して設計できます。テクスチャに変動を追加する場合は、この方法をおすすめします。

ステップ 3: ハードウェアを評価する

ハードウェア評価では、この特定の評価のために、効果 1、2、3 というラベルの付いた 3 つの触覚効果を定義します。

効果 1: 事前定義の短い触覚定数

VibrationEffect.EFFECT_CLICK 定数は、ステップ 2 で提供された HAL - API マッピングのベースライン効果または共通点です。これは、よく使用される効果である HapticFeedbackConstants.KEYBOARD_PRESS にマッピングされています。この効果を評価することで、対象デバイスがクリア ハプティクスに対応しているかどうかを判断できます。

効果 2: 短いカスタム触覚効果

VibrationEffect.createOneShot(20,255) 定数は、カスタムの触覚効果用です。短い単一のカスタム インパルスの場合、期間を定義する推奨最大しきい値は 20 ミリ秒です。20 ミリ秒を超える単一インパルスは、うるさいバイブレーションとして認識されるため、おすすめしません。

短いカスタム触覚効果

図 8. 短いカスタム触覚効果

効果 3: 振幅変動を伴う長いカスタム触覚効果

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) 定数は、振幅変動を伴う長いカスタム効果用です。カスタム触覚効果のさまざまな振幅を生成する機能は、リッチ ハプティクスに関するデバイスの機能を評価する指標の 1 つです。推奨される timings []amplitudes [] はそれぞれ {500, 500}{128, 255} です。500 ミリ秒のサンプリング レートで 50% から 100% まで振幅の増加傾向を示します。

振幅変動

図 9. 振幅変動を伴う長いカスタム触覚効果

効果 3 の振幅制御のハードウェア機能を確認するには、Vibrator.hasAmplitudeControl() メソッドを使用します。振幅が想定どおり変化するように VibrationEffect.createWaveform を実行するには、結果が true になる必要があります。

長いカスタム効果

図 10. 触覚効果 1、2、3 の主観評価

主観評価の実施

一貫性チェックをすばやく行うには、主観評価を行います。主観評価の目標は、触覚効果の振幅を観察し、人間が認識できる振幅を持つハプティクスをデバイスが生成できるかどうかを判断することです。

この概念に基づいた具体的な質問は次のようになります。「デバイスは、簡単に認識可能な触覚効果をユーザーに対して想定どおり生成できますか?」この質問に答えることで、ユーザーが感じられない認識不能なハプティクスや、波形が想定どおりのパターンを生成しない意図せぬハプティクスなど、ハプティクスの失敗を避けることができます。

高度な評価の実施

高度な品質評価を実施することを強くおすすめします。高度な品質評価では、触覚効果の定量化可能な属性を特徴づけて、高品質なハプティクスを実装します。終了すると、デバイス メーカーは現在の触覚ステータスを診断できるようになります。つまり、全体的な品質を改善する目標を設定できます。ハプティクスの品質評価をご覧ください。