2017-03-10 62 views
0

我正在使用闹钟管理器来呼叫api。它在onCreate活动中被调用。我希望它在应用程序启动时调用闹钟,然后每三小时报警一次。AlarmManager即使没有时间也会重复呼叫

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

回答

0

尝试通过删除运行calendar.set(Calendar.HOUR_OF_DAY,1);并运行,它会在应用程序启动时调用报警

+0

谢谢你的回答,但我的问题是警报正在触发,每当我宣布警报的活动重新创建。我需要的是在闹钟设置后,它会触发一次,每3小时打一次电话。会发生什么,即使没有时间,活动重新创建后也会再次触发。 – John

+0

你可以存储静态值prefrence来检查应用程序是否第一次运行或不基于你可以设置我看到的报警 –

+0

。非常感谢你。 – John

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)); 
} 
+0

感谢您的答案!它帮助了很多人欢呼 – John

相关问题