2015-03-25 46 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的)