Как я могу запустить свои действия Android с помощью распознавателя речи?

Я хочу изменить этот переключатель так, чтобы вместо того, чтобы нажимать кнопки, мои действия запускались, произнося имя связанного фрукта. Например, класс Apple будет запущен, если произнести слово «Apple». Как мне переписать этот переключатель? Все мои попытки сделать это пока не увенчались успехом. Любые предоставленные ответы будут высоко оценены. Благодарю вас!

package com.example.speech;

import com.example.speech.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class MainActivity extends Activity implements OnClickListener{

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

        // find our buttons and set onClickListeners for all
        ImageButton one = (ImageButton)findViewById(R.id.one);
        ImageButton two = (ImageButton)findViewById(R.id.two);
        ImageButton three = (ImageButton)findViewById(R.id.three);
        ImageButton four = (ImageButton)findViewById(R.id.four);
        ImageButton five = (ImageButton)findViewById(R.id.five);
        ImageButton six = (ImageButton)findViewById(R.id.six);
        one.setOnClickListener(this);
        two.setOnClickListener(this);
        three.setOnClickListener(this);
        four.setOnClickListener(this);
        five.setOnClickListener(this);
        six.setOnClickListener(this);
    }

    public void onClick(View v) {

        // do something based on the button that was clicked
        switch(v.getId()) {
            case R.id.one:
                // create an intent indicating we want
                // to start the activity.

                            Intent i = new Intent(this, Apple.class);
                // start the activity based on the Intent
                startActivity(i);
                finish();
                break;

            case R.id.two:
                    Intent j = new Intent(this, Orange.class);

                    // start the activity based on the Intent
                    startActivity(j);
                    finish();
                    break;

            case R.id.three:
                    Intent k = new Intent(this, Banana.class);

                    // start the activity based on the Intent
                    startActivity(k);
                    finish();
                    break;

            case R.id.four:
                    Intent l = new Intent(this, Grape.class);

                    // start the activity based on the Intent
                    startActivity(l);
                    finish();
                    break;

            case R.id.five:
                    Intent m = new Intent(this, Strawberry.class);

                    // start the activity based on the Intent
                    startActivityForResult(m, 0);
                    finish();
                    break;

            case R.id.six:
                    Intent n = new Intent(this, Kiwi.class);

                    // start the activity based on the Intent
                    startActivity(n);
                    finish();
                    break;
                    default:
                    finish();
        }

    };
}

Это правильный способ обработки результата голосовой активности?

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE)

            //If Voice recognition is successful then it returns RESULT_OK
            if(resultCode == RESULT_OK) {

                ArrayList<String> textMatchList = data
                .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

                if (!textMatchList.isEmpty()) {
                    // If first Match contains the word 'apple'
                    // Then start the apple activity.
                    if (textMatchList.get(0).contains("apple")) {
                            // create an intent indicating we want
                // to start the activity.

                            Intent i = new Intent(this, Apple.class);
                // start the activity based on the Intent
                startActivity(i);
                finish();
                break;

Я чувствую, что чего-то не хватает после этой строки...

if (textMatchList.get(0).contains("apple")) {

person user2593697    schedule 11.09.2013    source источник


Ответы (1)


здесь приведен пример руководства по использованию Распознавание голоса Android. Вам нужно обработать результат поиска в OnActivityResult и выполнить сопоставление строки с яблоком, бананом, виноградом и т. д. Если совпадение строки найдено, запустите соответствующее действие!

person prijupaul    schedule 11.09.2013
comment
Вы делаете это правильно. вы запускаете Activity с помощью RecognizerIntent (как в примере кода — проверьте startVoiceRecognitionActivity()). После завершения он вызовет onActivityResult с кодом результата, и вы проверите соответствие строки, а затем запустите действие для соответствующего фрукта. - person prijupaul; 11.09.2013