Подтвердить что ты не робот

How To: голосовые команды в приложение для Android

Есть много обучающих онлайн-приложений для добавления распознавания голоса в приложение для Android. Они часто сбивают с толку, и издатели кодирования никогда не доступны для вопросов. Мне нужен простой учебник с полным кодированием для добавления распознавания голоса в мое приложение.

4b9b3361

Ответ 1

Если вы хотите добавить голосовое распознавание в свое групповое приложение для Android, это очень просто.

В этом уроке вам нужно будет добавить импорт, когда вы вставляете код.

  • создайте xml файл или используйте существующий файл и убедитесь, что вы добавили кнопку и список.
  • в классе java вам необходимо расширить активность и реализовать OnClickListener Вы получите сообщение об ошибке, в котором говорится, что у вас есть нереализованные методы. Наведите указатель мыши на него и добавьте нереализованные методы. Мы добавим к этому позже.
  • Затем настройте кнопку и список в java.

    public ListView mList;
    public Button speakButton;
    

    также добавить:

    public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
    
  • Затем создайте метод OnCreate и настройте кнопку и прослушиватель.

    speakButton = (Button) findViewById(R.id.btn_speak);
    speakButton.setOnClickListener(this);
    

    также добавьте этот метод (мы его настроим дальше)

    voiceinputbuttons();
    

    Не забудьте установитьContentView для отображаемого вами xml.

  • Вне вашего oncreate создайте новый метод, который выглядит следующим образом.

    public void voiceinputbuttons() {
        speakButton = (Button) findViewById(R.id.btn_speak);
        mList = (ListView) findViewById(R.id.list);
    }
    
  • Теперь вам нужно будет настроить свою активность распознавания голоса, используя следующий код.

    public void startVoiceRecognitionActivity() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
            "Speech recognition demo");
        startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
    }
    
  • Далее, внутри вашего метода onclick с шага 2 добавьте действие с шага 6.

    startVoiceRecognitionActivity();
    
  • Далее нам нужно будет установить другой метод. Скопируйте и вставьте следующий код.

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
            ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));
    

    соответствует результат голосового ввода. Это список того, что, возможно, сказал пользователь. Использование оператора if для ключевого слова, которое вы хотите использовать, позволяет использовать любую активность, если ключевые слова соответствуют, можно установить несколько ключевых слов для использования одной и той же активности, поэтому более одного слова позволят пользователю использовать эту активность (делает это так пользователю не нужно запоминать слова из списка). Чтобы использовать активность из данных голосового ввода, просто используйте следующий формат:

    if (matches.contains("information")) {
        informationmenu();
    }
    

    ПРИМЕЧАНИЕ. Вы можете форматировать код в любое время, нажимая ctrl + shift + F в eclipse.

  • Теперь мы собираемся настроить наш метод, используемый кодом на шаге 8. Этот код создает намерение перенаправить пользователя в новое меню. Для этого вам понадобится другой класс xml и java. Кроме того, не забудьте добавить активность к вашему манифесту.

    public void informationMenu() {
        startActivity(new Intent("android.intent.action.INFOSCREEN"));
    }
    
  • Наконец, вам нужно настроить код, который позволит пользователю узнать, работает ли микрофон. Вставьте этот код внутри метода OnCreate в конце.

    // Check to see if a recognition activity is present
    // if running on AVD virtual device it will give this message. The mic
    // required only works on an actual android device
    PackageManager pm = getPackageManager();
    List activities = pm.queryIntentActivities(new Intent(
    RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
    if (activities.size() != 0) {
        voiceButton.setOnClickListener(this);
    } else {
        voiceButton.setEnabled(false);
        voiceButton.setText("Recognizer not present");
    }
    

ЗАКЛЮЧИТЕЛЬНОЕ ПРИМЕЧАНИЕ. Распознавание голоса не будет работать на виртуальном эмуляторе, потому что они не могут получить доступ к микрофону на вашем компьютере. Распознавание голоса будет работать только с подключением к Интернету.

Это ок. какой ваш последний код должен выглядеть в вашей java.

package com.example.com.tutorialthread;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.speech.RecognizerIntent;
import android.support.v4.app.NavUtils;

public class main extends Activity implements OnClickListener {

public ListView mList;
public Button speakButton;

public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    speakButton = (Button) findViewById(R.id.btn_speak);
    speakButton.setOnClickListener(this);

    voiceinputbuttons();
}

public void informationMenu() {
    startActivity(new Intent("android.intent.action.INFOSCREEN"));
}

public void voiceinputbuttons() {
    speakButton = (Button) findViewById(R.id.btn_speak);
    mList = (ListView) findViewById(R.id.list);
}

public void startVoiceRecognitionActivity() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
        "Speech recognition demo");
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}

public void onClick(View v) {
    // TODO Auto-generated method stub
    startVoiceRecognitionActivity();
}

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

    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
        // Fill the list view with the strings the recognizer thought it
        // could have heard
        ArrayList matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        mList.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, matches));
        // matches is the result of voice input. It is a list of what the
        // user possibly said.
        // Using an if statement for the keyword you want to use allows the
        // use of any activity if keywords match
        // it is possible to set up multiple keywords to use the same
        // activity so more than one word will allow the user
        // to use the activity (makes it so the user doesn't have to
        // memorize words from a list)
        // to use an activity from the voice input information simply use
        // the following format;
        // if (matches.contains("keyword here") { startActivity(new
        // Intent("name.of.manifest.ACTIVITY")

        if (matches.contains("information")) {
            informationMenu();
        }
    }
}

Ответ 2

Действительно хороший учебник. Молодцы.

Чтобы выполнить немного больше:

Вам нужно добавить разрешение на манифест, как показано ниже.

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

Также голос не работает, если у вас есть

launchMode="singleInstance" или launchMode="singleTask" похоже, что он должен быть "стандартным"