Android

【Android】 音声入力サンプルアプリ

Androidの音声入力について少し興味があったので、
サンプルを作成しました。

ボタンを押すと音声入力が開始されて、
識別されたものをListViewに表示するようにします。


activity_main.xml

layoutでは、ListViewとButtonを追加します。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <ListView
       android:id="@+id/list_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_above="@+id/voice_button">
   </ListView>

   <Button
       android:id="@+id/voice_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_centerHorizontal="true"
       android:text="音声入力"
       />
</RelativeLayout>


MainActivity.java

   private final int RESULT_CODE = 1000;

    private Button voiceButton;
    private ListView listView;
    private ArrayList list;
    private ArrayAdapter adapter;

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

        voiceButton = (Button) findViewById(R.id.voice_button);
        voiceButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

                    intent.putExtra(
                        RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                    
                    intent.putExtra(
                        RecognizerIntent.EXTRA_CALLING_PACKAGE,
                        getPackageName());
                    
                    startActivityForResult(intent, RESULT_CODE);
                } catch (ActivityNotFoundException e) {
                    Toast.makeText(MainActivity.this,
                            "ERROR", Toast.LENGTH_LONG).show();
                }
            }
        });

        listView = (ListView) findViewById(R.id.list_view);
        list = new ArrayList<>();
        adapter = new ArrayAdapter(this,
                android.R.layout.simple_expandable_list_item_1, list);
        listView.setAdapter(adapter);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_CODE) {
            if (resultCode == RESULT_OK) {
         // リストの消去
                list.clear();

                // 音声認識で返ってくる文字列リスト
                ArrayList results =
                        data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

                for (int i = 0; i < results.size(); i++) {
                    list.add(results.get(i));
                }
                // リストデータの更新
                adapter.notifyDataSetChanged();
            }
        }
    }

上記コードの赤文字部分が最低限必要なコードになります。

今後の開発にどう活かしましょうかね。
以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です