我正在使用小部件创建应用程序。小部件每隔10秒通过AlarmManager更新一次,但我会在屏幕关闭时停止AlarmManager,以防止可能的电池耗尽。我能怎么做?我尝试使用PowerManager但没有成功。 我在WidgetProvider中实现了AlarmManager,并通过广播调用WidgetReceiver类来更新值
-WIDGET PROVIDER:
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC,
System.currentTimeMillis() + 1000, 1000 * 5, update(context));
}
public static PendingIntent update(Context context) {
Intent intent = new Intent();
intent.setAction("com.aaa.intent.action.UPDATE_TIME");
if (service == null) {
service = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
return service;
}
-WIDGET RECEIVER:
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.gabriele.intent.action.UPDATE_TIME")) {
updateWidget(context);
}
}
private void updateWidget(Context context) {
update my widget
}
答案 0 :(得分:1)
在触发闹钟时检查屏幕是否亮起怎么样?
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isScreenOn()) {
// schedule the alarm
}
答案 1 :(得分:0)
当屏幕关闭时,某些内容将关闭您的闹钟:
@Override
protected void onPause() {
super.onPause();
// If the alarm has been set, cancel it.
if (alarmMgr!= null) {
alarmMgr.cancel(alarmIntent);
}
}
如果您希望在屏幕重新开启时再次启动,则需要在onResume中添加相应的代码。
修改强>
哎呀,这会在活动暂停时关闭闹钟。更好的方法是将其与其他答案结合起来:
PowerManager pm;
@Override
protected void onPause() {
super.onPause();
if (pm==null) {
pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
}
// If the alarm has been set AND the screen is off
if (alarmMgr!= null && !pm.isScreenOn()) {
alarmMgr.cancel(alarmIntent);
}
}