2015-03-25 44 views
0

我想問一下關於我的問題的更正。我看到一篇文章,教導如何使用文本來演講android代碼,但是我遵循了代碼,而我的AVD似乎沒有迴應。所以我去了另一個代碼並輸入,avd似乎也沒有迴應。有人可以幫我檢查錯誤嗎?文本到語音的android代碼

package net.learn2develop.tts; 

import java.util.Locale; 
import java.util.Random; 

import android.support.v7.app.ActionBarActivity; 
import android.content.Intent; 
import android.app.Activity; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends ActionBarActivity implements OnInitListener{ 

private int MY_DATA_CHECK_CODE=0; 
private TextToSpeech tts; 
private EditText inputText; 
private Button speakButton; 

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

    inputText=(EditText)findViewById(R.id.editText1); 
    tts=new TextToSpeech(getApplicationContext(), 
    new TextToSpeech.OnInitListener(){ 
     @Override 
     public void onInit(int status){ 
      if(status!=TextToSpeech.ERROR){ 
       tts.setLanguage(Locale.UK);} 
      } 
     }); 
    } 

@Override 
public void onPause(){ 
    if(tts!=null){ 
     tts.stop(); 
     tts.shutdown(); 
    } 
    super.onPause(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void speakText(View view){ 
    String toSpeak=inputText.getText().toString(); 
    Toast.makeText(getApplicationContext(), toSpeak,Toast.LENGTH_SHORT).show(); 
    tts.speak(toSpeak,TextToSpeech.QUEUE_FLUSH,null); 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onInit(int status) { 
    // TODO Auto-generated method stub 

} 

}

main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="net.learn2develop.tts.MainActivity" > 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_marginBottom="188dp" 
    android:layout_marginRight="67dp" 
    android:onClick="speakText" 
    android:text="@string/text1"/> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button1" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="81dp" 
    android:ems="10"> 
    <requestFocus/> 
</EditText> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="20dp" 
    android:text="@string/write" 
    android:textAppearance="?android:attr/textAppearanceLarge"/> 

+1

你測試你對設備的代碼? – NightFury 2015-03-25 07:21:03

+0

我目前使用相同的代碼,在Nexus 5上進行測試,無法聽到來自我的設備的任何語音。 PS:我第一次使用TTS,並試圖理解它。 – 2015-03-26 11:36:41

+0

看看這個鏈接:這是工作.. http://javatechig.com/android/android-texttospeech-example – 2015-03-26 11:55:05

回答

0

第一個錯誤是,你還沒有初始化你的按鈕在onCreate,也沒有給你一個OnClickListener它。另一個問題是您的onInit。當你重寫它,嘗試圍繞工作像這樣:

@Override 
    public void onInit(int status) { 

     if (status == TextToSpeech.SUCCESS) { 

      int result = tts.setLanguage(Locale.UK); 

      if (result == TextToSpeech.LANG_MISSING_DATA 
        || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
       Log.e("TTS", "This Language is not supported"); 
      } else { 
       button1.setEnabled(true); 
       speakText(); 
      } 

     } else { 
      Log.e("TTS", "Initilization Failed!"); 
     } 
    } 

和整個代碼看起來是這樣的:

public class MainActivity extends Activity implements 
     TextToSpeech.OnInitListener { 

    private TextToSpeech tts; 
    private Button speakButton; 
    private EditText inputText; 

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

     inputText = (EditText) findViewById(R.id.editText1); 
     tts = new TextToSpeech(this, this); 

     speakButton = (Button) findViewById(R.id.button1); 
     // button on click event 
     speakButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       speakOut(); 
      } 

     }); 
    } 

    @Override 
    public void onDestroy() { 
     // Don't forget to shutdown tts! 
     if (tts != null) { 
      tts.stop(); 
      tts.shutdown(); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    public void onInit(int status) { 

     if (status == TextToSpeech.SUCCESS) { 

      int result = tts.setLanguage(Locale.US); 

      if (result == TextToSpeech.LANG_MISSING_DATA 
        || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
       Log.e("TTS", "This Language is not supported"); 
      } else { 
       speakButton.setEnabled(true); 
       speakText(); 
      } 

     } else { 
      Log.e("TTS", "Initilization Failed!"); 
     } 

    } 

    private void speakText() { 

     String toSpeak = inputText.getText().toString(); 

     tts.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null); 
    } 
} 
0

有,我發現幾個錯誤: -

  1. 您不需要實現onInitListener並覆蓋方法onInit(),因爲您正在使用它一次,並且已經在OnCreate()方法中重寫。

  2. onInit()在OnCreate()後需要調用sayText()方法。

speakText(inputText的)