android音乐播放器监听电话状态

在手机上播放音乐的时候,我们希望监听电话的状态,当然在MID上没有电话功能,不需要监听。

 

如下代码是监听电话的状态,代码简单不做介绍直接看代码:

  1. private boolean mResumeAfterCall = false;  
  2. private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {  
  3.     @Override  
  4.     public void onCallStateChanged(int state, String incomingNumber) {  
  5.         if (state == TelephonyManager.CALL_STATE_RINGING) {  
  6.             AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);  
  7.             int ringvolume = audioManager  
  8.                     .getStreamVolume(AudioManager.STREAM_RING);  
  9.             if (ringvolume > 0) {  
  10.                 mResumeAfterCall = (player.isPlaying() || mResumeAfterCall);  
  11.                 try {  
  12.                     stub.pause();  
  13.                 } catch (RemoteException e) {  
  14.                     // TODO Auto-generated catch block  
  15.                     e.printStackTrace();  
  16.                 }  
  17.             }  
  18.         } else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {  
  19.             // pause the music while a conversation is in progress  
  20.             mResumeAfterCall = (player.isPlaying() || mResumeAfterCall);  
  21.             try {  
  22.                 stub.pause();  
  23.             } catch (RemoteException e) {  
  24.                 // TODO Auto-generated catch block  
  25.                 e.printStackTrace();  
  26.             }  
  27.         } else if (state == TelephonyManager.CALL_STATE_IDLE) {  
  28.             // start playing again  
  29.             if (mResumeAfterCall) {  
  30.                 // resume playback only if music was playing  
  31.                 // when the call was answered  
  32.                 try {  
  33.                     stub.resume();  
  34.                 } catch (RemoteException e) {  
  35.                     // TODO Auto-generated catch block  
  36.                     e.printStackTrace();  
  37.                 }  
  38.                 mResumeAfterCall = false;  
  39.             }  
  40.         }  
  41.     }  
  42. };  
 

 

使用的时候呢,就在service 的oncreate 里面添加,如下:

  1. public void onCreate() {  
  2.     player = new MediaPlayer();  
  3.     super.onCreate();  
  4.     TelephonyManager tmgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
  5.     tmgr.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);  
  6.     IntentFilter filter = new IntentFilter();  
  7.   
  8.     filter.addAction(SERVICECMD);  
  9.     filter.addAction(PAUSE_ACTION);  
  10.     receiver = new MusicServiceReceiver();  
  11.     registerReceiver(receiver, filter);  
  12. }  
 

 

在ondestroy 里面删除就可以了

  1. public void onDestroy() {  
  2.     // Log.e(TAG, "onDestroy" +player.isPlaying() );  
  3.     // System.out.println("onDestroy");  
  4.     unregisterReceiver(receiver);  
  5.     player.release();  
  6.     player = null;  
  7.       
  8.     TelephonyManager tmgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
  9.     tmgr.listen(mPhoneStateListener, 0);  
  10.     super.onDestroy();  
  11. }  
 

posted @ 2012-06-10 15:10  夏至冬末  阅读(378)  评论(0编辑  收藏  举报