我正在开发一个使用蓝牙自动连接到附近配对设备的应用程序。出于这个原因,我需要收听像ACTION_FOUND,DISCOVERY_FINISHED等蓝牙特定的广播,我必须注册一个广播接收器,它监听那些广播并相应地执行动作。事情是我需要这个广播接收器在我的应用程序的后台随时工作。我试图将它装入一个intentservice,但事实证明它完成了快速,onDestroy被称为结束我的接收器。为了克服这个问题,我插入了一个无限循环,只有当属性从true变为false时才会中断。不知怎的,我觉得这是一个不好的做法,所以我问你是否有更好的解决方案?
PS。我应该在主要活动中安装接收器吗?什么时候被摧毁?只有当我使用后退按钮退出应用程序时才调用onDestroy,或者使用任务杀手终止进程,或者当我在应用程序中输入另一个GUI窗口时是否也会发生这种情况?
谢谢,迈克
答案 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>