3

我正在使用本教程中关于如何接收 SMS 消息的一些代码:

该代码完美运行,并且完全符合我的要求。

我有 1 个问题。

我希望我的应用程序在后台运行,但是当它关​​闭时,我希望它停止拦截 SMS 消息。

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

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

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

4

3 回答 3

17

通过将您的清单放入BroadcastReceiver清单中,默认情况下它始终处于活动状态。因此,如果您希望它仅在显示时运行,则需要在恢复/暂停时Activity启用/禁用:BroadcastReceiverActivity

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相同的生命周期事件中声明您的。

于 2013-05-07T22:14:44.603 回答
0

我环顾四周,这是我得出的结论

try{
        unregisterReceiver(mybroadcast);
    }catch(IllegalArgumentException e){
        Log.d("reciever",e.toString());
    }

我会说覆盖 onDestroy() 并把它放在那里

于 2013-05-07T22:10:37.497 回答
-1

我会说在您的应用程序对象上覆盖 OnTerminate() 并在那里取消注册您的接收者。

@Override
public void onTerminate() {
    unregisterReceiver(mybroadcast);
    super.onTerminate();
}
于 2013-05-07T22:13:57.853 回答