首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得一个BroadcastReceiver来比它的活动更长寿

获得一个BroadcastReceiver来比它的活动更长寿
EN

Stack Overflow用户
提问于 2012-07-25 16:37:58
回答 3查看 696关注 0票数 0

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

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

它的工作非常好,直到活动(注册的两个)停止。我的意思是,按下电话上的后退按钮,并假定调用了onStop()或/和onDestroy()方法。

我的问题是,在活动完成后,我如何才能让BroadcastReceiver运行,只有当我“强制”关闭应用程序时,才能停止接收?

更新:

好的,根据前面的答案,我认为,我需要做的是从清单文件启动我的BroadcastReciever,而不是从活动开始。这就是我想要做的,但它并没有开始接收:

代码语言:javascript
复制
<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的intellisense发现的。所有这些都在xml的<application></application>部分中。

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-25 16:39:40

创建服务并在报表中注册您的接收器。然后Android会唤醒你的接收器,即使你的应用程序现在已经关闭了。

票数 2
EN

Stack Overflow用户

发布于 2012-07-25 16:51:58

如果您在报表(而不是代码)中声明了您的BroadcastReceiver,并且如果接收启动完成了,那么它将始终是活动的。

在您的清单文件中这样:

代码语言:javascript
复制
        <receiver android:name=".BootReceiver">  
         <intent-filter>  
             <action android:name="android.intent.action.BOOT_COMPLETED" />  
         </intent-filter>  
    </receiver>

注意:您需要这个权限才能这样做:

代码语言:javascript
复制
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  
票数 0
EN

Stack Overflow用户

发布于 2012-07-25 19:34:59

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

代码语言:javascript
复制
<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>

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

你将不得不做研究,以确定你是否需要包括许可。这篇SO帖子建议你不要这么做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11654526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档