我正在使用this tutorial中的一些代码来了解如何接收短信:
代码完美无缺,完全符合我的要求。
我遇到1个问题。
我希望我的应用在后台运行,但当它关闭时,我希望它停止拦截短信。
我的问题是,为什么我的应用程序在关闭后仍会截取短信?
我想我必须找到一个“关闭”处理程序然后关闭广播接收器。 (如果有一个“on close”事件处理程序..?)。
如果有人能提供一些见解,我将非常感激。谢谢!
答案 0 :(得分:17)
将BroadcastReceiver
放入您的清单中,默认情况下,它始终处于活动状态。因此,如果您希望仅在显示Activity
时运行,则在BroadcastReceiver
恢复/暂停时,您需要启用/停用Activity
:
public void onResume()
{
ComponentName component=new ComponentName(this, TextMessageReceiver.class);
getPackageManager()
.setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
public void onPause()
{
ComponentName component=new ComponentName(this, TextMessageReceiver.class);
getPackageManager()
.setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
另一种方法是在BroadcastReceiver
中声明Activity
,然后在相同的生命周期事件中调用registerReceiver
和unregisterReceiver
。
答案 1 :(得分:0)
try{
unregisterReceiver(mybroadcast);
}catch(IllegalArgumentException e){
Log.d("reciever",e.toString());
}
我会说覆盖onDestroy()并将其放在那里
答案 2 :(得分:-1)
我会说在您的应用程序对象上覆盖OnTerminate()并取消注册您的接收器。
@Override
public void onTerminate() {
unregisterReceiver(mybroadcast);
super.onTerminate();
}