[英]Android : setAlarmManager(…) open an activity instead of delaying the opening
在android中,我必須在特定時間設置鬧鍾,鬧鍾會在一天的正確時間響起並打開活動。
我的問題是函數“ alarmManager.set(...)”立即打開目標活動,並且在到達時間后再次打開同一活動。
我不明白為什么這種情況我該如何糾正?
當前狀態:我有一個時間選擇器,可以幫助我選擇時間。 我也有一個按鈕,當我單擊它時,它會通過從時間選擇器中檢索時間並以ms為單位計算下一個警報,從而調用函數alarmManager.set()。
謝謝
按鈕代碼:
public void setTheAlarm(View view) {
TimePicker tp_clock = (TimePicker) findViewById(R.id.tp_timeToRing);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int alarmHours = tp_clock.getCurrentHour();
int alarmMinutes = tp_clock.getCurrentMinute();
Toast.makeText(this, "Alarm set for " + alarmHours + "h" + alarmMinutes, Toast.LENGTH_LONG).show();
Long time = calculateTime(alarmHours, alarmMinutes);
alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}
函數代碼calculateTime:
public Long calculateTime(int alarmHours, int alarmMinutes) {
Calendar c = Calendar.getInstance();
int currentHours = c.get(Calendar.HOUR);
if (c.get(Calendar.AM_PM) == 1)
currentHours +=12;
int currentMinutes = c.get(Calendar.MINUTE);
int setAlarmHours = 0;
int setAlarmMinutes = 0;
int balanceWithMinute = 0;
if (alarmMinutes >= currentMinutes) {
setAlarmMinutes = alarmMinutes - currentMinutes;
}
else {
setAlarmMinutes = (60 - currentMinutes) + alarmMinutes;
balanceWithMinute = 1;
}
if (alarmHours > currentHours)
setAlarmHours = alarmHours - currentHours;
if (alarmHours < currentHours)
setAlarmHours = (24 - currentHours) +alarmHours - balanceWithMinute;
if (alarmHours == currentHours && balanceWithMinute == 1)
setAlarmHours = 23;
Long time = new GregorianCalendar().getTimeInMillis()+setAlarmHours*setAlarmMinutes*60*1000;
return time;
}
AlarmManager的代碼:
package fr.pixelcraft.victor.wackertest.SoundPackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import fr.pixelcraft.victor.wackertest.LoginActivity;
public class AlarmReciever extends BroadcastReceiver {
private String userToken;
private String userId;
@Override
public void onReceive(Context context, Intent intent) {
Intent i=new Intent(context, PlanASoundActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
userToken = intent.getStringExtra(LoginActivity.USER_TOKEN);
userId = intent.getStringExtra(LoginActivity.USER_ID);
i.putExtra(LoginActivity.USER_TOKEN, userToken);
i.putExtra(LoginActivity.USER_ID, userId);
context.startActivity(i);
Toast.makeText(context, "Alarm triggered", Toast.LENGTH_LONG).show();
}
}
通過https://stackoverflow.com/users/2649012/frank-n-stein :
可能您設置的時間已經過去了。 這使AlarmManager立即啟動。 –
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.