Голосовое управление на Андроид Часть 1

На этом уроке мы создадим Intent для запуска диалогового окна которое будет распознавать наш голос и переводить его в текст и проверим все ли работает в порядке, для этого результат будем выводить в TextView. На следующем уроке начнем создавать часть которая будет что либо делать по определенному слову, например показывать определенную картинку произнеся определенное слово ли все что угодно главное что бы вы поняли принцип как все это работает! Создаем новый проект как обычно и выбираем шаблон Empty Activity.

Permissions

Что бы не забыть начнем с добавления разрешения permissions в наш файл Manifest это разрешение нам позволит использовать микрофон. Если мы его не добавим то выйдет ошибка и приложение не откроется.

Добавляем данную строчку в файл manifest вверху сразу после названия пакета.

<uses-permission android:name="android.permission.RECORD_AUDIO" />

например у меня это выглядит вот так но у вас будет другое название пакета:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.neco_desarrollo.voicecomander_test_1">
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

Экран (Layout)

теперь создаем наш экран, для начало мы просто используем один TextView и один Button. При нажатии на кнопку будет отправляться сообщение к системе и у нас на экране появится диалоговое окно что означает что можно произносить слова . Слова сразу отобразятся в нашем TextView. Вот таким образом должен выглядеть наш файл экрана который находиться в папке layout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">

<TextView
android:id="@+id/textTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.115" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickMic"
android:text="Mic"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textTest"
app:layout_constraintVertical_bias="0.812" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity

Ну и конечно самое главное это код в основном activity. Пока что код будет выглядеть вот так а в следующем уроке мы начнем его улучшать:

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.widget.TextView;


import java.util.ArrayList;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {
private TextView textTest;

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

}
private void init()
{
textTest = findViewById(R.id.textTest);
}
public void onClickMic(View view)
{
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
startActivityForResult(intent, 10);
}



@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null)
{
switch (requestCode)
{
case 10:
ArrayList<String> text = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
textTest.setText(text.get(0));
break;

}
}
}
}

Заключение

Если все сделано правильно то при нажатии на кнопку должно открыться диалоговое окно для считывания голоса а по окончанию когда окно исчезнет если мы что либо сказали эти слова должны появиться в нашем TextView. Надеюсь у вас все получилось! Всего доброго и увидимся на следующем уроке. Подписывайся на блог что бы получать уведомления о новых уроках!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *