即使没有时间,AlarmManager也会重复呼叫

时间:2017-03-10 02:39:57

标签: java android

我正在使用闹钟管理器来呼叫api。它在onCreate中被调用。我希望它在应用程序启动时调用警报,然后每隔三小时发出警报。

Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY,1);
    AlarmManager alarmManager1 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent myIntent1 = new Intent(LobbyActivity.this,WeatherBroadCastReceiverCurrent.class);
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this,0,myIntent1,0);

    alarmManager1.setInexactRepeating(AlarmManager.RTC,calendar.getTimeInMillis(),AlarmManager.INTERVAL_HOUR+
            AlarmManager.INTERVAL_HOUR+AlarmManager.INTERVAL_HOUR/*(1000*60*60*3)*/,pendingIntent1);

然后,当单击按钮时,该活动结束并进入另一个活动。我的问题是 - 如果重新创建活动,即使不是时间,它也会调用警报。我可以在非活动类上设置警报,以便在重新创建活动时不会调用它吗?如果是这样的话? TIA

2 个答案:

答案 0 :(得分:0)

尝试删除 calendar.set(Calendar.HOUR_OF_DAY,1); 并运行,它会在应用开始时调用闹钟

答案 1 :(得分:0)

要简单地克服这个问题,你需要创建一个标志并将其设置为true,以便活动可以检查警报是否已经设置,它是否已经设置,然后它将向前移动而不进行设置。

使用SharedPreferences是理想的选择。 这是我的一个片段,根据您的需要进行编辑。

SharedPreferences prefs;
SharedPreferences.Editor ed;
prefs = PreferenceManager.getDefaultSharedPreferences(this);
ed = prefs.edit();
boolean isOpeningForTheFirstTime = prefs.getBoolean("firstTime", true);

if(!isOpeningForTheFirstTime) {
    Intent i = new Intent(this, StartScreen.class);
    startActivity(i);
    finish();
}

通过删除一些内容可以简化AlarmManager。

public void setAlarm(){

    //To get the current time
    long alertTime = new GregorianCalendar().getTimeInMillis();

    //Interval of a minute
    int timeInterval = 60000;

    //Intent which you want to start
    Intent alertIntent = new Intent(this, ClassName.class);

    //Declaring the alarmManager
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    //Setting the alarmmanager up.
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alertTime, timeInterval, PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT));
}