開発者コンソール

Amazon Input SDK

Amazon Input SDK

Amazon Input SDKを使用すると、キーボードとマウスでアプリを操作する方法を説明するヘルプダイアログをユーザーに表示できます。これにより、通常はアプリの操作にキーボードとマウスを使用しないユーザーにも快適で便利なエクスペリエンスを提供できます。このガイドに従う前に、アプリでキーボードとマウスのサポートが有効になっていることを確認してください。キーボードとマウスのサポートを追加する方法については、Windows互換性ガイドの入力コントロールを参照してください。

Unityを使用している場合は、Unity用Amazon Input SDKを参照してください。

要件

Amazon Input SDKを使用するには、APIレベル19以上のバージョンのAndroid SDKが必要です。

Input SDKをプロジェクトに追加する方法

以下からAmazon Input SDKをダウンロードします。

ダウンロードには、AARファイル、Javadoc、サンプルアプリが含まれています。

オプション1: 手動でSDKを追加する方法

プロジェクトにAmazon Input SDKを追加するには、以下の手順に従って、AARファイルをライブラリとしてインポートします。

  1. Android Studioでプロジェクトを開きます。Projectフォルダ構造ビューを使用してください。
  2. appフォルダの下にlibsフォルダが存在しない場合は作成します。AARファイルをapp/libsフォルダにコピーします。
  3. プロジェクトフォルダを右クリックし、[Open Module Settings] を選択します。
  4. サイドバーで [Dependencies] をクリックし、アプリモジュール (または同等のモジュール) を選択します。
  5. [Declared Dependencies] の下にある [+] 記号をクリックし、SDK AARの場所のパス(libs/inputmapping-[x].aar)を指定します。これにより、依存関係が自動的にbuild.gradleファイルに追加されます。
  6. [OK] をクリックします。
  7. アプリレベルのbuild.gradleファイルに依存関係が追加されていることを確認します。以下に例を示します。

     dependencies {
         implementation files('libs/inputmapping-1.0.1.aar')
     }
    
  8. アプリレベルのbuild.gradleファイルに次の2つの依存関係を追加します。
     implementation 'com.android.support.constraint:constraint-layout:2.0.4'
     implementation 'com.android.support:recyclerview-v7:28.0.0'
    

オプション2: Maven Centralを使用してSDKを追加する方法

  1. 次のように、アプリレベルのbuild.gradleファイルの依存関係セクションにAmazon Input SDKを追加します。
  dependencies {
      ...
      implementation 'com.amazon.device.inputmapping:inputmapping:1.0.1'
  }
  1. プロジェクトの最上位のbuild.gradleファイルで、Maven Centralリポジトリが定義されていることを確認します。定義されていない場合は次のように追加します。
  allprojects {
      repositories {
          mavenCentral()
      }
      dependencies {
          ...
      }
  }

入力マップの作成

Amazon Input SDKでは、次の図に示すように、キーイベントとマウスクリックを入力アクションにマッピングし、それらのアクションを入力グループにグループ化して、入力グループから入力マップを作成します。

キーボードからの入力は入力アクションにマッピングされます。複数の入力アクションがグループ化され、1つの入力グループを形成します。複数の入力グループが1つの入力マップを形成します。

入力アクションの定義

入力アクションとは、アプリのアクションに対応するイベントです。入力アクションは、キーまたはキーの組み合わせにマッピングできます。次の例では、「Jump」アクションがSpaceキーに、「Move」アクションがマウス移動にマッピングされます。

 

クリップボードにコピーされました。

InputAction jumpInputAction = InputAction.create(
        "Jump",
        MyGameActions.JUMP, // ここでのMyGameActionsはゲーム内の列挙体
        InputControls.create(
                Collections.singletonList(KeyEvent.KEYCODE_SPACE),
                Collections.emptyList()
        )
);

InputAction cmbMove = InputAction.create(
        "Move",
         MyGameActions.MOVE,
        InputControls.create(
                Collections.emptyList(),
                Collections.singletonList(InputControls.MOUSE_MOVEMENT)
        )
);

 

クリップボードにコピーされました。

val jumpInputAction = InputAction.create(
            "Jump",
            MyGameActions.JUMP.value, // ここでのMyGameActionsはゲーム内の列挙体
            InputControls.create(
                listOf(KeyEvent.KEYCODE_SPACE),
                emptyList()
            )
        )

val move = InputAction.create(
            "Move",
            MyGameActions.MOVE.ordinal,
            InputControls.create(
                emptyList(),
                listOf(InputControls.MOUSE_MOVEMENT)
            )
        )

例で使用されているInput SDKのメソッド:

  • InputAction.create(String actionLabel, int uniqueId, InputControls inputControls)
    • 考慮事項:
      • uniqueIdには列挙値を使用します。
  • InputControls.create(List<Integer> keyboardActions, List<Integer> mouseActions)
    • 考慮事項:
      • keyboardActionsには、AndroidフレームワークのKeyEventクラスのキーコード定数を使用します。
      • mouseActionsには、Amazon Input SDKのInputControlsクラスの定数を使用します。

入力グループの定義

入力グループとは、複数の入力アクションのグループです。入力グループには、グループラベルと、そのグループに属する入力アクションのリストが含まれます。各InputActionは、いずれかのInputGroupに関連付けられている必要があります。次の例では、前のセクションで定義した入力アクションを使用して、「Basic Movement」という入力グループを作成します。

 

クリップボードにコピーされました。

InputGroup movementInputGroup = InputGroup.create("Basic Movement",
        Arrays.asList(jumpInputAction, move));

 

クリップボードにコピーされました。

var movementGroup = InputGroup.create("Basic Movement", 
        listOf(move, jumpInputAction)
)

例で使用されているInput SDKのメソッド:

  • InputGroup.create(String groupName, List<InputAction> actions)

入力マップの作成

入力マップは、アプリの入力グループのコレクションです。入力マップには、アプリに適用できるマウス設定も格納されます。すべての入力アクションを定義して入力グループにグループ化したら、次の例のように入力マップを作成します。

 

クリップボードにコピーされました。

return InputMap.create(
        Arrays.asList(movementInputGroup, specialInputGroup),
        MouseSettings.create(true, true));

 

クリップボードにコピーされました。

return InputMap.create(
    listOf(moveGroup, gameControls),
    MouseSettings.create(true, true)
)

例で使用されているInput SDKのメソッド:

  • InputMap.create(List<InputGroup> inputGroups, MouseSettings mouseSettings)
  • MouseSettings.create(boolean adjustableSensitivity, boolean invertedYAxis)

入力マッピングプロバイダーの作成

リクエストに応じて入力マップを提供するには、InputMappingProviderインターフェイスを実装します。ユーザーがヘルプ画面をリクエストすると、Amazon Input SDKは入力マッピングプロバイダーを呼び出します。

 

クリップボードにコピーされました。

public class CustomInputMapProvider implements InputMappingProvider {

    @Override
    public InputMap onProvideInputMap() {
        // 入力マップを返します。
    }
}

 

クリップボードにコピーされました。

class CustomInputMapProvider: InputMappingProvider {

    override fun onProvideInputMap(): InputMap {
        // 入力マップを返します。
    }
}

入力マッピングプロバイダーの登録

一度にアクティブにできる入力マップは1つだけです。ユーザーがヘルプ画面にアクセスすると、現在アクティブな入力マップが表示されます。入力マッピングプロバイダーをアクティブな入力マッピングプロバイダーとして登録するには、次の例のようにInput静的クラスを使用します。

 

クリップボードにコピーされました。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    InputMappingClient inputMappingClient = Input.getInputMappingClient(this);
    inputMappingClient.setInputMappingProvider(new CustomInputMapProvider());
}

 

クリップボードにコピーされました。

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val inputMappingClient = Input.getInputMappingClient(this)
        inputMappingClient.inputMappingProvider = CustomInputMapProvider();
    }

アクティブな入力マッピングプロバイダーは、アクティビティが変わっても変更されず、ライフサイクルイベントの影響を受けません。ただし、InputMappingClientを使用して別のアクティブな入力マッピングプロバイダーを設定すると、アクティブな入力マップを変更できます。

ヘルプ画面の表示

ヘルプ画面を表示できるようにするために、Amazonアプリストアでは、クリック時にヘルプ画面を開く視覚要素をユーザーに表示することをお勧めします。この視覚的なインジケーターは、ゲームウィンドウ内に配置することも、設定ページや管理ページなどの別の画面に配置することもできます。ヘルプ画面を表示するには、次のようにTriggerHandler.showHelp()メソッドを使用します。

 

クリップボードにコピーされました。

TriggerHandler.getInstance().showHelp(this, "マイアプリ");

 

クリップボードにコピーされました。

TriggerHandler.getInstance().showHelp(this, "マイアプリ");

Amazon Input SDK APIリファレンス

このセクションでは、Amazon Input SDKのAPIの一部を紹介します。完全なAPIリファレンスについては、Amazon Input SDK APIリファレンス(英語のみ)を参照してください。

InputControls

InputControls.create(List<Integer> keyboardActions, List<Integer> mouseActions)

InputControlsオブジェクトは、キーボードアクションのリストとマウスアクションのリストを格納します。このオブジェクトは、静的メソッドのInputControls.create()を使用して作成されます。

InputControls.create()メソッドは新しいInputControlsオブジェクトを返します。InputControlsオブジェクトを使用して、InputActionを作成します。

InputAction

InputAction.create(String actionLabel, int uniqueId, InputControls inputControls)

InputActionオブジェクトは、ラベル、一意のID、InputControlsオブジェクトを格納します。このオブジェクトは、静的メソッドのInputAction.create()を使用して作成されます。

InputAction.create()メソッドは新しいInputActionオブジェクトを返します。InputActionオブジェクトを使用して、InputGroupを作成します。

InputGroup

InputGroup.create(String groupName, List<InputAction> actions)

InputGroupオブジェクトは、名前とInputActionオブジェクトのリストを格納します。このオブジェクトは、静的メソッドのInputGroup.create()を使用して作成されます。

InputGroup.create()メソッドは新しいInputGroupオブジェクトを返します。InputGroupMouseSettingsと共に使用して、InputMapを作成します。

MouseSettings

MouseSettings.create(boolean adjustableSensitivity, boolean invertedYAxis)

MouseSettingsオブジェクトは、感度の調整とY軸の反転を表すboolean型のマウス設定を格納します。このオブジェクトは、静的メソッドのMouseSettings.create()を使用して作成されます。

MouseSettings.create()メソッドは新しいMouseSettingsオブジェクトを返します。MouseSettingsInputGroupと共に使用して、InputMapを作成します。

InputMap

InputMap.create(List<InputGroup> inputGroups, MouseSettings mouseSettings)

InputMapオブジェクトは、InputGroupオブジェクトのリストとMouseSettingsオブジェクトを格納します。このオブジェクトは、静的メソッドのInputMap.create()を使用して作成されます。

InputMap.create()メソッドは新しいInputMapオブジェクトを返します。InputMappingProviderの実装では、InputMapを戻り値として返します。

InputMappingProvider

InputMappingProviderインターフェイスは、onProvideInputMap()メソッドを提供します。独自の実装でこのメソッドをオーバーライドして、InputMapを返します。ユーザーがヘルプ画面にアクセスすると、InputMapのデータが表示されます。

InputMappingClient

InputMappingClientを使用すると、InputMappingProviderを管理できます。以下のメソッドがあります。

  • setInputMappingProvider(InputMappingProvider inputMappingProvider):そのInputMappingClientのインスタンスにInputMappingProviderを割り当てます。
  • clearInputMappingProvider():現在割り当てられているInputMappingProviderを削除し、nullに設定します。
  • getInputMappingProvider():現在割り当てられているInputMappingProviderを返します。

Input

このクラスは、InputMappingClientをインスタンス化するために使用されます。以下のメソッドがあります。

  • getInputMappingClient(Activity activity)InputMappingClientのシングルトンインスタンスを返します。

TriggerHandler

このクラスは、ヘルプダイアログを表示するメソッドを提供します。以下のメソッドがあります。

  • getInstance()TriggerHandlerのシングルトンインスタンスを返します。
  • showHelp(Activity activity, String title):入力のヘルプダイアログボックスを表示します。登録されているInputMapからデータを取得し、ダイアログボックスに表示します。次のパラメーターを受け取ります。
    • activity - ヘルプダイアログを含むアクティビティ
    • title - ダイアログに表示するアプリのタイトル
  • showHelp(Activity activity, String title, UIMode uiMode):指定されたテーマ(ライトまたはダーク)で入力のヘルプダイアログボックスを表示します。次のパラメーターを受け取ります。
    • activity - ヘルプダイアログを含むアクティビティ
    • title - ダイアログに表示するアプリのタイトル
    • uiMode - テーマの設定。有効な値はUIMode.AUTOUIMode.LIGHTUIMode.DARK
  • setUiMode(UIMode uiMode):ダイアログボックスのテーマを設定します。次のパラメーターを受け取ります。
    • uiMode - テーマの設定。有効な値はUIMode.AUTOUIMode.LIGHTUIMode.DARK

UIMode

これは、ヘルプダイアログでテーマを設定するために使用できる定数を定義する列挙型です。定数は以下のとおりです。

  • AUTO - システムテーマに従います
  • DARK - ダークテーマを使用します
  • LIGHT - ライトテーマを使用します

Last updated: 2024年3月5日