分享

Android 距离感应器和耳机状态监测(控制Audio输出通道切换)

 quasiceo 2015-11-13
分类: 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输出通道

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多