0

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

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

下面是 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())

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

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

那么,有人可以帮帮我吗?

安德烈亚

4

2 回答 2

0

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

于 2014-06-05T17:44:12.593 回答
0

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

于 2014-06-05T18:02:11.100 回答