public class MainActivity extends Activity implements SensorEventListener {
private TextToSpeech mSpeech = null;
private Button btn = null;
private Button btnAudio = null;
private AudioManager audioManager;
private SensorManager mSensorManager;
private Sensor mSensor;
private Boolean flag = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new BtnListener());
btnAudio = (Button) findViewById(R.id.btnAudio);
btnAudio.setOnClickListener(new BtnAudioListener());
mSpeech = new TextToSpeech(MainActivity.this, new TTSListener());
Toast.makeText(MainActivity.this, "start", Toast.LENGTH_SHORT).show();
audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
audioManager.setMode(AudioManager.MODE_NORMAL);
}
private class TTSListener implements OnInitListener {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = mSpeech.setLanguage(Locale.CHINA);
Toast.makeText(MainActivity.this, "result = " + result,
Toast.LENGTH_LONG).show();
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
System.out.println("don't support ");
mSpeech
.speak("don't support Chinese", TextToSpeech.QUEUE_FLUSH, null);
} else {
mSpeech.speak("语音已经准备好", TextToSpeech.QUEUE_FLUSH, null);
}
}
}
}
private class BtnListener implements OnClickListener {
@Override
public void onClick(View v) {
mSpeech.speak("test data", TextToSpeech.QUEUE_FLUSH, null);
mSpeech.speak("12345678", TextToSpeech.QUEUE_ADD, null);
mSpeech.speak("中文语音支持", TextToSpeech.QUEUE_ADD, null);
mSpeech.speak("TTS是android自带的语音合成库,使用方便,效果不错", TextToSpeech.QUEUE_ADD,
null);
}
}
private class BtnAudioListener implements OnClickListener {
@Override
public void onClick(View v) {
if(flag)
flag = false;
else
flag = true;
setMySpeakerphoneOn(flag);
}
}
private void setMySpeakerphoneOn(boolean on) {
if (on) {
audioManager.setSpeakerphoneOn(true);
Toast.makeText(this, "扬声器模式", Toast.LENGTH_LONG).show();
audioManager.setMode(AudioManager.MODE_NORMAL);
} else {
audioManager.setSpeakerphoneOn(false);// 关闭扬声器
Toast.makeText(this, "听筒模式", Toast.LENGTH_LONG).show();
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
// 把声音设定成Earpiece(听筒)出来,设定为正在通话中
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); //android 5.0+
}
}
@Override
protected void onResume() {
mSensorManager.registerListener(this, mSensor,
SensorManager.SENSOR_DELAY_NORMAL);
super.onResume();
}
@Override
protected void onPause() {
mSensorManager.unregisterListener(this);
super.onPause();
}
@Override
protected void onDestroy() {
if (mSpeech != null) {
mSpeech.stop();
mSpeech.shutdown();
mSpeech = null;
}
audioManager.setSpeakerphoneOn(true);
audioManager.setMode(AudioManager.MODE_NORMAL);
super.onDestroy();
}
@Override
public void onSensorChanged(SensorEvent event) {
float range = event.values[0];
if (range == mSensor.getMaximumRange()) {
audioManager.setSpeakerphoneOn(true);
Toast.makeText(this, "扬声器模式", Toast.LENGTH_LONG).show();
audioManager.setMode(AudioManager.MODE_NORMAL);
} else {
audioManager.setSpeakerphoneOn(false);// 关闭扬声器
Toast.makeText(this, "听筒模式", Toast.LENGTH_LONG).show();
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
布局:
<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"
tools:context=".MainActivity" >
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="49dp"
android:text="@string/btn" />
<Button
android:id="@+id/btnAudio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="132dp"
android:text="@string/btnAudio" />
</RelativeLayout>
相关取值:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TTS</string>
<string name="action_settings">Settings</string>
<string name="btn">播报</string>
<string name="btnAudio">扬声器</string>
<string-array name="languages">
<item>CANADA</item>
<item>CHINA</item>
<item>CHINESE</item>
<item>ENGLISH</item>
<item>US</item>
</string-array>
</resources>
页面: