如何取消注册来电和去电呼叫接收方?

时间:2014-06-05 17:35:06

标签: android receiver

我正在为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())

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

我从不注册这个接收器,他们工作没有我“称呼”他们 我不知道是否必须取消注册,以防万一我必须这样做。

那么,有人可以帮我吗?

安德烈

2 个答案:

答案 0 :(得分:0)

BroadcastReceiver中声明Intent或其他AndroidManifest接收者时,总是"在"上。将注册和注销移至应用程序执行的开始和结束,或在应用程序中的其他时间;然后你就可以在运行时控制它的开启时间。

答案 1 :(得分:0)

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