应用关闭后广播接收器仍然运行 - Android

时间:2013-05-07 22:07:09

标签: java android sms handle

我正在使用this tutorial中的一些代码来了解如何接收短信:

代码完美无缺,完全符合我的要求。

我遇到1个问题。

我希望我的应用在后台运行,但当它关闭时,我希望它停止拦截短信。

我的问题是,为什么我的应用程序在关闭后仍会截取短信?

我想我必须找到一个“关闭”处理程序然后关闭广播接收器。 (如果有一个“on close”事件处理程序..?)。

如果有人能提供一些见解,我将非常感激。谢谢!

3 个答案:

答案 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,然后在相同的生命周期事件中调用registerReceiverunregisterReceiver

答案 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();
}