use*_*228 5 service android broadcastreceiver
我希望每次Intent.ACTION_BATTERY_CHANGED被广播时都会调用Broadcastreceiver,这样我就可以跟踪一些数据.
我现在拥有的:
public class ReceiverApplication extends Application {
@Override
public void onCreate() {
// Register Receiver
}
public static BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Start Service to progress data
}
};
}
Run Code Online (Sandbox Code Playgroud)
这很好用直到我使用最近的应用程序"Taskmanager"来刷掉我的一个偏好屏幕或我的主要活动.然后BroadcastReceiver不再被调用.如果我启动其中一个活动,则调用ReceiverApplication的onCreate()并再次开始工作.
我可以通过一直运行空服务来解决这个问题.通过滑动一个活动似乎没有杀死该服务,并且在一段时间后调用onCreate()并重新启动BroadcastReceiver而不做任何事情.这里的问题是我不希望服务一直运行.
那么,如果用户想要的话,我怎样才能在任何能够接收广播的Acitivity或Service之外获得Broadcastreceiver?
不要嵌套广播接收器并动态注册它,而是在 Android 清单中声明一个广播接收器根据文档,BATTERY_CHANGED 不能在清单中声明:
您无法通过清单中声明的组件接收此信息,只能通过使用 Context.registerReceiver() 显式注册它。有关通过清单接收器发送和接收的不同电池相关广播,请参阅 ACTION_BATTERY_LOW、ACTION_BATTERY_OKAY、ACTION_POWER_CONNECTED 和 ACTION_POWER_DISCONNECTED。
我将注册一个广播接收器来接收所有这些事件:
<receiver
android:name="MyBroadcastReceiver">
<intent-filter>
<action
android:name="android.intent.action.BATTERY_LOW" />
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.BATTERY_OKAY" />
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
无论您的应用程序是否正在运行,广播接收器都会收到通知。
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |