打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android 距离感应器和耳机状态监测(控制Audio输出通道切换)
分类: android 2014-07-18 15:25 1474人阅读 评论(1) 收藏 举报
 * 切换扬声器播放声音 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. 距离感应器监听方法:

  1. /* 
  2.      * 实现SensorEventListener需要实现的两个方法。 
  3.      */  
  4.     @Override  
  5.     public void onSensorChanged(SensorEvent event) {  
  6.         // TODO Auto-generated method stub  
  7.         f_proximiny = event.values[0];  
  8.   
  9.         if (f_proximiny >= mProximiny.getMaximumRange()) {  
  10.             Log.i("==================>onSensorChanged""MODE_NORMAL");  
  11.             audioManager.setMode(AudioManager.MODE_NORMAL);  
  12.         } else {  
  13.             Log.i("==================>onSensorChanged""MODE_IN_CALL");  
  14.             audioManager.setMode(AudioManager.MODE_IN_CALL);  
  15.         }  
  16.     }  

2. 耳机插拔监听:

2.1 广播注册:

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

2.2 广播监听:
  1. public class HeadsetPlugReceiver extends BroadcastReceiver {   
  2.         @Override   
  3.         public void onReceive(Context context, Intent intent) {   
  4.             Log.i("NoisyAudioStreamReceiver=====================>""change mode");  
  5.             if (intent.hasExtra("state")){   
  6.                 if (intent.getIntExtra("state"0) == 0){   
  7.                     Log.i("NoisyAudioStreamReceiver=====================>headset not connected""change mode1");  
  8.                     audioManager.setMode(AudioManager.MODE_NORMAL);  
  9.                 }   
  10.                 else if (intent.getIntExtra("state"0) == 1){   
  11.                     Log.i("NoisyAudioStreamReceiver=====================>headset connected""change mode3");  
  12.                     audioManager.setMode(AudioManager.MODE_IN_CALL);  
  13.                 }   
  14.             }   
  15.         }   
  16.     }   

2.3 广播注销:
  1. @Override  
  2.     protected void onDestroy() {  
  3.         super.onDestroy();  
  4.         unregisterReceiver(myNoisyAudioStreamReceiver);  
  5.     }  


Demo下载:

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
tvbox Ypbpr和HDMI模式之间的切换
Android AudioManager音量控制流程
Android的framework层音量控制原理分析
10.3 AudioManager(音频管理器)
Android之进程查看,关闭(可操作所有进程)
Android 短信发送
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服