2016-09-01 34 views
1

我的应用程序包含两个字符串和两个按钮,一个英文字符串和印地语字符串,当我点击英语说话按钮时,英语字符串正在发音,当我来到印地语字符串它是不响应给定的单词有人提到如何将文本添加到印地语的语音?

这里是我的MainActivity看喜欢,

public class MainActivity extends AppCompatActivity { 

private TextView englishString, hindiString; 
private Button englishButton, hindiButton; 
private TextToSpeech textToSpeech; 

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

    englishString = (TextView) findViewById(R.id.englishString); 
    hindiString = (TextView) findViewById(R.id.hindiString); 

    englishButton = (Button) findViewById(R.id.englishButton); 
    hindiButton = (Button) findViewById(R.id.hindiButton); 

    englishButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      loadSpeakingLanguages(englishString.getText().toString()); 
     } 
    }); 

    hindiButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      loadSpeakingLanguages(hindiString.getText().toString()); 
     } 
    }); 
} 


private void loadSpeakingLanguages(String textToTranslate) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     ttsGreater21(textToTranslate); 
    } else { 
     ttsUnder20(textToTranslate); 
    } 
} 

@SuppressWarnings("deprecation") 
private void ttsUnder20(String text) { 
    HashMap<String, String> map = new HashMap<>(); 
    map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId"); 
    textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, map); 
} 

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
private void ttsGreater21(String text) { 
    String utteranceId = this.hashCode() + ""; 
    textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId); 
} 


@Override 
protected void onResume() { 
    textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { 
     @Override 
     public void onInit(int status) { 
      if (status != TextToSpeech.ERROR) { 
       textToSpeech.setLanguage(Locale.ENGLISH); 
      } 
     } 
    }); 
    super.onResume(); 
} 

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

这里是我的activity_main样子,

<?xml version="1.0" encoding="utf-8"?> 
<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="ravi.texttospeech.MainActivity"> 

<TextView 
    android:id="@+id/englishString" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" 
    android:textSize="25dp" /> 

<TextView 
    android:id="@+id/hindiString" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/englishString" 
    android:text="नमस्ते दुनिया" 
    android:textSize="25dp" /> 

<Button 
    android:id="@+id/englishButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/hindiString" 
    android:text="Speak English Text" /> 

<Button 
    android:id="@+id/hindiButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/englishButton" 
    android:text="Speak Hindi Text" /> 

And here is how my app look like

回答

2

我在代码中完成了的一些修改

hindiButton.setOnClickListener(new View.OnClickListener() { 
     @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
     @Override 
     public void onClick(View view) { 
      loadSpeakingLanguages(hindiString.getText().toString()); 
      textToSpeech.setLanguage(Locale.forLanguageTag("hin")); 
     } 
    }); 

它对我工作很好。

您需要使用ISO 639 3个字母的单词或ISO 639 2个字母的单词

退房的ISO国名,在这种link

注有相应的代码此方法仅适用于棒棒糖和下一个版本

+0

谢谢@karthik。它的工作正常。你救了我的一天。 :) –

+0

快乐编码@ravi – Karthik

+0

@Karthik伟大的工作好先生,,,你可以请帮助我的卡纳达 –