Android: Alarm to be play every 30 minutes and it start from 12:30

╄→гoц情女王★ 提交于 2019-12-09 01:44:05

问题


Here i am going to use the alarm service to play the alarm at every 30 minutes. Right now i have set it to play it at every 10 second from the Every start.

Here is the Code:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_layout);


    Intent myIntent = new Intent(SettingsActivity.this, MyAlarmService.class);
    pendingIntent = PendingIntent.getService(SettingsActivity.this, 0, myIntent, 0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent);

}

Now the Problem is, I want to start the alarm from the 12:30 not from the time application start and it should repeatedly play at evert 30 minutes. like 1:00, 1:30, 2:00 . . . etc

So what changes i have to do in my code ?


回答1:


To start a service at specific time. see this post maybe helpful:

Using Alarmmanager to start a service at specific time




回答2:


Set your initial alarm time for 12:30 using the Set method.

When the alarm fires, then set up your next alarm time and keep doing that until you don't want the alarm any more.

You don't need a service to do such a simple task. AlarmManager is more than capable of handling this.




回答3:


Try it

And Use first time -

Try another




回答4:


A naive approach would be:

  1. Start a context that will always run, such as a Thread in a Service.
  2. Calculate the timestamp of the time you want the next alert to ring using Date and put it in "long alertTimestamp".
  3. In a loop, calculate the timestamp right now using Date and put it in "long nowTimestamp" .
  4. If nowTimestamp < alertTimestamp, put the thread to sleep for (alertTimestamp - nowTimestamp).
  5. Else sound the alert and recalculate alertTimestamp, repeat.

Make sure you catch notify interruptions to the tread gracefully, that is the key to aborting the timer.

Hope this was helpful.




回答5:


For repeating every 30 minutes you will need to add this to your code:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60*30, pendingIntent); //millisecs*seconds*minutes

But I haven't figure out how to start at specific time yet.



来源:https://stackoverflow.com/questions/10039593/android-alarm-to-be-play-every-30-minutes-and-it-start-from-1230

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!