语音识别处理程序

时间:2015-02-02 13:35:15

标签: android handler speech

这是我第一次在这里发帖。

我是Android Studio新手。

我想为谷歌语音识别创建一个处理程序。

这是主要的课程

package com.example.recnonocimientodevoz;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Index extends Activity {

    private Button boton;
    private EditText texto;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_index);
        boton = (Button)findViewById(R.id.boton);
        texto = (EditText) findViewById(R.id.texto);
        boton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                VRecognition VR = new VRecognition();
                VR.startRecognition();
                texto.setText(VR.getResult());
            }
        });
    }
}

这是处理程序

package com.example.recnonocimientodevoz;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import java.util.ArrayList;

public class VRecognition extends Activity{

    private static final int VOICE_RECOGNITION_REQUEST_CODE = 1;
    private String phrase = null;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_index);
    }

    public VRecognition(){
    }

    public void startRecognition (){
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK){
            ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            phrase = result.get(0);
        }
    }
    public String getResult(){
        return phrase;
    }
}

我调试了代码,发现在调用onActivityResult时崩溃了。

我希望你能帮助我。谢谢

2 个答案:

答案 0 :(得分:2)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    boton = (Button)findViewById(R.id.button);
    texto = (EditText) findViewById(R.id.editText);
    boton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent i;
            i = new Intent(getApplicationContext(),VRecognition.class);
            startActivity(i);
        }
    });
}

并将VRecognition活动更改为

public class VRecognition extends Activity{
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1;
private String phrase = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    startRecognition();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK){
        ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        phrase = result.get(0);
    }
}


public void startRecognition(){
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);

}

}

答案 1 :(得分:0)

这是我的代码,这里是连接方法,用于检查网络连接,没有语音识别不会工作......

您还应该像这样使用Android清单中的权限

AndroidManifest.xml
<uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="19" />

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

然后代码

    public class SpeechRecognition extends Activity {
        private static final int REQUEST_CODE = 1234;
        Button Start;
        TextView Speech;
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Start = (Button)findViewById(R.id.start_reg);
            Speech = (TextView)findViewById(R.id.speech);

            Start.setOnClickListener(new OnClickListener() {
            @Override
             public void onClick(View v) {
                if(isConnected()){
                 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                 RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                 startActivityForResult(intent, REQUEST_CODE);
                         }
                else{
                    Toast.makeText(getApplicationContext(), "Plese Connect to Internet", Toast.LENGTH_LONG).show();
                }}

            });   
    }


    public  boolean isConnected()
        { 
            ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo net = cm.getActiveNetworkInfo();
        if (net!=null && net.isAvailable() && net.isConnected()) {
            return true;
        } else {
            return false; 
        }
        }


     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
             String text = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
speech.setText(text);
}

谢谢你, 问候 Jayakar V