如何注销来电和去电接收者?

Posted

技术标签:

【中文标题】如何注销来电和去电接收者?【英文标题】:How to unregister incoming call and outgoing call receivers? 【发布时间】:2014-06-05 17:35:05 【问题描述】:

我正在为 android 开发一个应用程序。 我使用三星 Galaxy S3 和原始 ROM Jelly Bean 4.3。

我的来电和去电接收器有问题。

IncomingCallReceiver的代码如下:

public void onReceive(Context context, Intent intent) 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) 
        if (Start.getMusicService().isPlaying()) 
            pauseMusicService();

            isMusicPlaying = true;
        
    
    else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) 
        if (isMusicPlaying)
            restartMusicService();
            isMusicPlaying = false;
        
    

但这不是问题,这段代码可以正常工作,并且拨出电话接收器也可以正常工作。

我的问题是当我退出应用程序时,这个接收器仍然工作。

碰巧,在我上次打开应用程序几天后,我接到一个电话,应用程序崩溃了。

我认为这是因为我编写了代码:

if (Start.getMusicService().isPlaying())

因为开始(我的第一个活动)不存在。

我从来没有注册过这个接收器,他们没有我“打电话”他们就可以工作。 我不知道我是否必须取消注册,以防万一我必须这样做。

那么,谁能帮帮我?

安德烈亚

【问题讨论】:

Intent 的接收器是在你的 AndroidManifest 中还是在运行时注册的? @DanS 是的,我在清单上声明了两个接收器,它们工作正常。 【参考方案1】:

在您的AndroidManifest 中声明BroadcastReceiver 或其他Intent 接收器时,它始终处于“开启”状态。将注册和注销移动到您的应用程序执行的开始和结束,或在您的应用程序中的其他时间;那么您将能够控制它在运行时何时开启。

【讨论】:

【参考方案2】:

以上答案是正确的。如果您想自己注册和/或取消注册接收器,您应该在 onResume 中注册并在 onPause 中取消注册以防出现活动。看看这个例子http://sohailaziz05.blogspot.com/2012/05/broadcast-receiver-two-ways-to.html

【讨论】:

以上是关于如何注销来电和去电接收者?的主要内容,如果未能解决你的问题,请参考以下文章

无论如何要为Android中的来电和去电制作我的自定义用户界面吗?

Android 记录来电和去电

在 android API29+ 中检测来电和去电

无法在 Android 中录制来电和去电的音频

Android 2.1+ 暂停来电/去电,完成后恢复

知道手机号码如何查区号