我正在为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(我的第一个活动)不存在。
我从不注册这个接收器,他们工作没有我“称呼”他们 我不知道是否必须取消注册,以防万一我必须这样做。
那么,有人可以帮我吗?
安德烈
答案 0 :(得分:0)
在BroadcastReceiver
中声明Intent
或其他AndroidManifest
接收者时,总是"在"上。将注册和注销移至应用程序执行的开始和结束,或在应用程序中的其他时间;然后你就可以在运行时控制它的开启时间。
答案 1 :(得分:0)
以上答案是正确的。如果您想自己注册和/或取消注册接收者,您应该注册onResume并在活动时取消注册onPause。看一下这个例子http://sohailaziz05.blogspot.com/2012/05/broadcast-receiver-two-ways-to.html