AlarmManager未触发onReceived

时间:2015-10-22 10:16:13

标签: java android timer alarmmanager android-alarms

我创建了一个名为“VIAlarmManager”的类,在那里我创建了一个AlarmManager并设置了一些属性。但无论如何,警报都没有被解雇,我做错了什么?我尝试调用在给定间隔内重复的任务(例如1分钟/ 2分钟/ 15分钟),并且它也应该在睡眠时执行。

这是我的代码:

public final class VIAlarmManager{

public static AlarmManager alarmManager;
public int freq = 60;

public VIAlarmManager(int freq_in_sec){
    this.freq = freq_in_sec;
}

public void setFrequency(int freq_in_sec){
    this.freq = freq_in_sec;
}

public void setAlarm(){
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.MINUTE, 1);
    alarmManager = (AlarmManager) MainActivity.Context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(MainActivity.Context, VIAlarmManager.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.Context, 0, intent, 0);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),1000 * 60 * 1, pendingIntent);
}

public void cancleAlarm(){
    Intent intent = new Intent(MainActivity.Context, VIAlarm_Heartbeat.class);
    PendingIntent sender = PendingIntent.getBroadcast(MainActivity.Context, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) MainActivity.Context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(sender);
}




public static class VIAlarm_Heartbeat extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.w("AlarmManager", "Calling Heartbeat now");
        MainActivity.beat.beat();
    }
}}

我的AndroidManifest包含以下行:

<receiver android:name="com.videro.util.VIAlarmManager$VIAlarm_Heartbeat" android:enabled="true" ></receiver>

在我的主要活动中,我打电话:

 AlarmManager = new VIAlarmManager(60);
 AlarmManager.setAlarm();

1 个答案:

答案 0 :(得分:0)

如果它只是一个简单的警报,那么经典的方法是使用活动TimePicker来选择时间,使用 BroadcastReceiver 来启动警报以及服务以向用户发送通知。

Here是如何做到这一点的工作方式!希望它有帮助:)