我应该在哪里注册广播接收器?

时间:2011-10-28 16:58:34

标签: android multithreading bluetooth broadcastreceiver intentservice

我正在开发一个使用蓝牙自动连接到附近配对设备的应用程序。出于这个原因,我需要收听像ACTION_FOUND,DISCOVERY_FINISHED等蓝牙特定的广播,我必须注册一个广播接收器,它监听那些广播并相应地执行动作。事情是我需要这个广播接收器在我的应用程序的后台随时工作。我试图将它装入一个intentservice,但事实证明它完成了快速,onDestroy被称为结束我的接收器。为了克服这个问题,我插入了一个无限循环,只有当属性从true变为false时才会中断。不知怎的,我觉得这是一个不好的做法,所以我问你是否有更好的解决方案?

PS。我应该在主要活动中安装接收器吗?什么时候被摧毁?只有当我使用后退按钮退出应用程序时才调用onDestroy,或者使用任务杀手终止进程,或者当我在应用程序中输入另一个GUI窗口时是否也会发生这种情况?

谢谢,迈克

1 个答案:

答案 0 :(得分:2)

如果您动态注册接收方(Context.registerReceiver),则在您的活动暂停之前, 作业会取消注册(Context.unregisterReceiver)。从文档中读取:

  

暂停时不会收到意图,这将减少不必要的系统开销

当某些内容隐藏您的活动时,将会调用

onPause。你可以在onResume上重新注册。

然而,这不是您所需要的。如果您希望在应用程序耗尽时接收广播,则需要在Android Manifest中声明它。我认为这段代码可行:

    <receiver android:name=".YourReceiverClassName">
        <intent-filter>
            <action android:name="android.bluetooth.adapter.action.ACTION_FOUND"/>
            <action android:name="android.bluetooth.adapter.action.ACTION_DISCOVERY_FINISHED"/>
        </intent-filter>
    </receiver>