0

我在一个 Android 应用程序上工作,应该在通知栏中简单地发布一些关于电池的信息。我像所有教程建议的那样开始了这个项目:

  • 我创建了一个广播接收器。它处理 UI 的东西。
  • 然后我创建了一个 IntentFilter,它只过滤 ACTION_BATTERY_CHANGED 意图
  • 然后我简单地用我的主 Activity 的 registerReceiver() 方法注册了 IntentFilter 和 BroadcastReceiver 实例。

它工作得非常好,直到 Activity(注册这两个)停止。通过停止我的意思是,我按下手机上的后退按钮,我假设 onStop() 或/和 onDestroy() 方法被调用。

我的问题是,我怎样才能让 BroadcastReceiver 在 Activity 完成后运行,并且只有在我“强制关闭”应用程序时才停止接收?

更新:

好的,从我认为以前的答案来看,我需要做的是从清单文件而不是从 Activity 启动我的 BroadcastReciever。这是我试图做的,但它根本没有开始接收:

<receiver android:name="com.battery.indicator.BatteryReciever" android:enabled="true" >
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" ></action>
    </intent-filter> 
</receiver>

name 属性是我的 Reciever 类的整个包路径。动作名称是 Eclipse 的智能感知发现的。所有这些都在<application></application>xml 的一部分中。

我究竟做错了什么?

4

3 回答 3

2

创建服务并在清单中注册您的接收器。即使您的应用当前已关闭,Android 也会唤醒并呼叫您的接收器。

于 2012-07-25T16:39:40.330 回答
0

如果您在 Manifest(而不是代码)中声明您的 BroadcastReceiver 并让如果接收启动完成,它将始终处于活动状态。

像这样在你的清单文件中:

        <receiver android:name=".BootReceiver">  
         <intent-filter>  
             <action android:name="android.intent.action.BOOT_COMPLETED" />  
         </intent-filter>  
    </receiver>

注意:您需要此权限才能执行此操作:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  
于 2012-07-25T16:51:58.920 回答
0

我不确定这是否有帮助,但这是我设置清单的方式。

<manifest xmlns:android="http://schemas.android.com./apk/res/android"
          package="com.namespace"
          versionCode, etc>

   //List permissions you use, looks like there is one for battery stats
   <uses-permission android:name="android.permission.BATTERY_STATS" />

   <application>
     <receiver android:name=".broadcast_recievers.BatteryReciever">
       <action android:name="android.intent.action.BATTERY_CHANGED" />
     </receiver>
   </application>
</manifest>

我要说明的主要区别是您在清单标记中声明项目命名空间/包,然后在接收器名称中声明类的路径。在我的示例中,我将在 com.namespace.broadcast_recievers 中有一个名为 BatteryReciever 的类。

您必须进行研究以确定是否需要包含许可。这个SO post 建议你不要。

于 2012-07-25T19:34:59.030 回答