zoukankan      html  css  js  c++  java
  • 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. }  
     

    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    Spring中通配符问题
    <context:component-scan>子标签:<context:include-filter>和<context:exclude-filter>使用时要注意的地方
    (转)Spring常见注解总结
    (转)Spring常用注解
    spring配置文件引入properties文件:<context:property-placeholder>标签使用总结
    (转)Java多线程学习(吐血超详细总结)
    Druid连接池(四)
    sublime自动保存设置
    情感分类
    psvm中String [] args 理解
  • 原文地址:https://www.cnblogs.com/iplus/p/4467417.html
Copyright © 2011-2022 走看看