Android(安卓)距离感应器和耳机状态监测(控制Audio输出通道切换)
16lz
2021-01-26
* 切换扬声器播放声音 or 听筒播放
* 1. 距离感应器:继承SensorEventListener这个监听,重写onSensorChanged方法
* 2. 检测耳机插入和拔出:HeadsetPlugReceiver监听广播AudioManager.ACTION_AUDIO_BECOMING_NOISY和"android.intent.action.HEADSET_PLUG",
2. 耳机插拔监听:
2.2 广播监听:
2.3 广播注销:
* 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输出通道
更多相关文章
- Android周学习Step By Step(9)--Intent之广播(完)
- Android(安卓)仿抖音列表
- Android之使用NotificationListenerService使得自己的应用不被杀
- 对Android(安卓)软键盘向下的监听
- 关于Android键盘遮挡
- Android(安卓)给Button加个监听
- Android用户界面开发(20):SeekBar
- Android(安卓)广播接收器学习之监听网络变化
- 注册广播的两种方式:动态广播和静态广播的区别和用法