2015-02-02 8 views
1

Это мой первый пост здесь.Обработчик распознавания речи

Я новичок в Android Studio.

Я хотел бы создать обработчик для распознавания речи Google.

Это основной класс

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 называется.

Надеюсь, вы можете мне помочь. благодаря

+0

пожалуйста, напишите LogCat, чтобы увидеть точное описание проблемы .. – Opiatefuchs

ответ

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); 

} 

}

+0

Привет Хариш, спасибо за вашу помощь. Я хотел бы иметь 2 класса, один будет интерфейсом, а другой вернет результат, идея состоит в том, чтобы вызвать этот метод из многих интерфейсов. –

+0

Вы хотите, чтобы класс VRecognition являлся активностью, которая может быть вызвана из многих видов деятельности? – Harish

+0

thats right, извините меня за мое невежество, как я уже говорил, я начинаю программировать на Android-устройствах. Если бы вы могли мне помочь, было бы хорошо. спасибо –

0

Вот мой код, здесь подключен метод используется для проверки подключения к сети, без этого распознавания речи не будет работать ...

Вы должны также использовать разрешения на андроид манифеста как этот

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

+0

Здравствуйте Jayakar спасибо за ваш ответ, я ожидал, чтобы иметь 2 разделенные классы, идея состоит в вызове VRecognition.startRecognition(); затем VRecognition.getResult(); из многих классов. –

+1

Вы реализовали подключенный метод ... Bfore вызов распознавания речи @ Nacho Silva –

+0

Не обязательно Jayakar основное приложение будет работать на устройствах с желе, которые предлагают автономное распознавание. Но thx для совета :) –

Смежные вопросы