如何注销来电和去电接收者?
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
【讨论】:
以上是关于如何注销来电和去电接收者?的主要内容,如果未能解决你的问题,请参考以下文章