当我关闭屏幕时如何停止更新小部件android?

时间:2015-03-04 03:36:15

标签: android widget alarmmanager powermanager

我正在使用小部件创建应用程序。小部件每隔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
}

2 个答案:

答案 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);
    }
}