* 3. 切换扬声器模式和听筒模式 需要增加权限: <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
下面是核心代码:
1. 距离感应器监听方法:
/* * 实现SensorEventListener需要实现的两个方法。 */ @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub f_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.1 广播注册:
myNoisyAudioStreamReceiver = new HeadsetPlugReceiver(); IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); intentFilter.addAction("android.intent.action.HEADSET_PLUG"); registerReceiver(myNoisyAudioStreamReceiver, intentFilter);
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); } } } }
@Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myNoisyAudioStreamReceiver); }
Demo下载:
Android 距离感应控制Audio输出通道