2016-09-01 46 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偉大的工作好先生,,,你可以請幫助我的卡納達 –