* 切换扬声器播放声音 or 听筒播放
* 1. 距离感应器:继承SensorEventListener这个监听,重写onSensorChanged方法
* 2. 检测耳机插入和拔出:HeadsetPlugReceiver监听广播AudioManager.ACTION_AUDIO_BECOMING_NOISY和"android.intent.action.HEADSET_PLUG",

* 3. 切换扬声器模式和听筒模式 需要增加权限: <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>


下面是核心代码:

1. 距离感应器监听方法:

/* * 实现SensorEventListener需要实现的两个方法。 */@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubf_proximiny = event.values[0];if (f_proximiny >= mProximiny.getMaximumRange()) {Log.i("==================>onSensorChanged", "MODE_NORMAL");audioManager.setMode(AudioManager.MODE_NORMAL);} else {Log.i("==================>onSensorChanged", "MODE_IN_CALL");audioManager.setMode(AudioManager.MODE_IN_CALL);}}

2. 耳机插拔监听:

2.1 广播注册:

myNoisyAudioStreamReceiver = new HeadsetPlugReceiver();IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);intentFilter.addAction("android.intent.action.HEADSET_PLUG");registerReceiver(myNoisyAudioStreamReceiver, intentFilter);

2.2 广播监听:

public class HeadsetPlugReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("NoisyAudioStreamReceiver=====================>", "change mode");if (intent.hasExtra("state")){ if (intent.getIntExtra("state", 0) == 0){ Log.i("NoisyAudioStreamReceiver=====================>headset not connected", "change mode1");audioManager.setMode(AudioManager.MODE_NORMAL);} else if (intent.getIntExtra("state", 0) == 1){ Log.i("NoisyAudioStreamReceiver=====================>headset connected", "change mode3");audioManager.setMode(AudioManager.MODE_IN_CALL);} } } } 

2.3 广播注销:

@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(myNoisyAudioStreamReceiver);}


Demo下载:

Android 距离感应控制Audio输出通道


更多相关文章

  1. Android周学习Step By Step(9)--Intent之广播(完)
  2. Android(安卓)仿抖音列表
  3. Android之使用NotificationListenerService使得自己的应用不被杀
  4. 对Android(安卓)软键盘向下的监听
  5. 关于Android键盘遮挡
  6. Android(安卓)给Button加个监听
  7. Android用户界面开发(20):SeekBar
  8. Android(安卓)广播接收器学习之监听网络变化
  9. 注册广播的两种方式:动态广播和静态广播的区别和用法

随机推荐

  1. 构造函数、原型、dom基础
  2. 利用AJAX实现一个无刷新的分页功能
  3. 员工管理添加登录验证 - 注册 - 管理授权
  4. Python 项目代码写完了,然后怎么打包和发
  5. Python 只用一行代码,可以实现哪些事儿?
  6. 使用 Python 写一个友好的 API 还是很重
  7. 网工在路上--一文弄懂MSTP协议
  8. 哟呵,Github 免费从 0 到 1搭建个人博客网
  9. docker学习
  10. 网工在路上--漫谈生成树中的防护机制