博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android下TTS的传感器切换听筒和扬声器测试
阅读量:2193 次
发布时间:2019-05-02

本文共 4002 字,大约阅读时间需要 13 分钟。

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) {	}}

权限:

布局:

相关取值:

TTS
Settings
播报
扬声器
CANADA
CHINA
CHINESE
ENGLISH
US
页面:

你可能感兴趣的文章
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机11:Java内存异常原理与实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析3:Spring IOC容器的加载过程
查看>>
Spring源码剖析4:懒加载的单例Bean获取过程分析
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
Spring源码剖析7:AOP实现原理详解
查看>>
Spring源码剖析8:Spring事务概述
查看>>
Spring源码剖析9:Spring事务源码剖析
查看>>
重新学习Mysql数据库1:无废话MySQL入门
查看>>
探索Redis设计与实现2:Redis内部数据结构详解——dict
查看>>