我在Android应用上工作,应该只是在通知栏中发布一些有关电池的信息。我开始这个项目就像所有建议的教程一样:
它工作得很好,直到Activity(注册了两个)停止。通过停止我的意思,我按下手机上的后退按钮,我假设调用onStop()或/和onDestroy()方法。
我的问题是,如何在活动结束后让BroadcastReceiver运行,并且只有当我'强制关闭'应用程序时才停止接收?
更新
好的,从以前的答案我认为,我需要做的是从清单文件启动我的BroadcastReciever,而不是从Activity启动。这是我试图做的,但它根本没有开始接收:
<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>
部分。
我做错了什么?
答案 0 :(得分:2)
创建服务并在Manifest中注册您的接收器。然后,即使您的应用程序当前已关闭,Android也会唤醒并呼叫您的接收方。
答案 1 :(得分:0)
如果你在Manifest中声明你的BroadcastReceiver(而不是代码),并且如果接收Boot已经完成,那么它将永远存在。
在清单文件中这样:
<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"/>
答案 2 :(得分: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帖子暗示你没有。