【问题标题】:Handling Incoming calls in android application处理android应用程序中的来电
【发布时间】:2012-11-14 19:57:07
【问题描述】:

我开发了一个与音乐相关的安卓应用程序。我在处理来电时的媒体播放器时遇到问题。我想在通话期间暂停音频,并在通话结束后恢复。我需要建议是否使用带有 onstatechanged 的​​ TelephonyManager 来暂停和恢复音频(或)在来电期间暂停和恢复应用程序本身的任何其他方法。

【问题讨论】:

    标签: android android-mediaplayer telephonymanager


    【解决方案1】:

    给你

    在清单中包含以下权限。

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    然后

    PhoneStateListener phoneStateListener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            if (state == TelephonyManager.CALL_STATE_RINGING) {
    
            } else if(state == TelephonyManager.CALL_STATE_IDLE) {
               Play music
            } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) {
               Pause music
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    };
    
    
    TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    if(mgr != null) {
        mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
    }
    

    onDestroy注销它,成为一个优秀的安卓公民

    if(mgr != null) {
        mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
    }
    

    当用户接听电话时,CALL_STATE_OFFHOOK 将被调用。您可以在此处编写代码来暂停播放。

    【讨论】:

    • 它工作正常,但我只想在用户接受呼叫而不是在振铃状态时停止音频。
    • @Vipul,谢谢这对我帮助很大,所以最后一部分进入调用者类的 onDestroy 中?所以我必须将phoneStateListener 设为实例变量?
    【解决方案2】:

    在您的活动中使用onPause()onResume() 方法。当有来电时,会调用 onPause() 方法。挂断时调用 onResume()。

    即使用户点击从其他应用发送的通知,这也会起作用。

    【讨论】:

    • 如果您想让音乐继续播放,而 Activity 不在前台,那就不好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    相关资源
    最近更新 更多