1

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

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

谢谢,迈克

回答

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> 
+0

谢谢你,在这里人们可能会找到更多的信息: http://www.vogella.de/articles/AndroidServices/article.html – Miky

+0

@Jong做ü有任何想法的问题这里说明http://stackoverflow.com/q/20904455/2624806 – CoDe