AlarmManager让我的设备保持清醒数小时

时间:2014-02-28 05:22:59

标签: android alarmmanager wakelock

我有一个必须每天00:00执行的应用程序,因此我使用AlarmManager来设置警报。

这是我用来设置警报的类:

package bembibre.coolstar.windowsmobilewidget.backend.alarms;

import java.util.Calendar;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;

public class AlarmSetter{
    private Context mContext;
    private AlarmManager mAlarmManager;

    public AlarmSetter(Context context){
        mContext = context;
        mAlarmManager =
        (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    }

    public void setAlarm(Calendar when){
        Intent i = new Intent(mContext, OnAlarmReceiver.class);
        PendingIntent pi =
        PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT);
        mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
    }
}

当时钟到达00:00时,我的类onReceive()的{​​{1}}方法被调用,设备总是自动唤醒(我想AlarmManager是谁做的)但是当{{1}时方法完成后,设备会持续保持清醒状态,永远不会进入睡眠状态。我不会管理唤醒锁,因为onAlarmReceiver会让设备保持清醒直到onReceive方法完成,而我必须做的工作非常轻松。我的AlarmManager课程是这样的:

onReceive

方法onAlarmReceiver非常轻。我已经读过我应该做的是让package bembibre.coolstar.windowsmobilewidget.backend.alarms; import bembibre.coolstar.windowsmobilewidget.ExtendedAppWidgetProvider; import bembibre.coolstar.windowsmobilewidget.ListItemClickService; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class OnAlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ExtendedAppWidgetProvider.setDayChangeAlarm(context); new ListItemClick(context).update(); } } 成为一个IntentService,在调用update()之前获取一个唤醒锁,启动ListItemClick,并在其内部完成后,释放唤醒锁定。但这个唤醒者将是我的。 AlarmManager未发布唤醒锁将继续保持设备唤醒直到无限。所以我什么都不懂。假设有两个唤醒锁,AlarmManager唤醒锁和矿井,我释放矿井,AlarmManager唤醒锁将继续发布。

0 个答案:

没有答案