*我正在開發一個Android應用程序,在用戶選擇的特定時間觸發鬧鐘。但問題是,如果用戶從現在起將其設置爲一小段時間,則只會觸發該警報。所以就好像應用程序沒有運行,警報不會觸發。我已經獲得一個鎖,並設置標誌以保持屏幕。有時當我將它設置爲從現在開始15分鐘或類似的工作,然後我再試一次,但它不。我還將廣播接收器包含在清單中。這裏是我的日程表報警代碼:鬧鐘並不總是觸發android
public void schedule(Activity activity){
Context context = activity.getApplicationContext();
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmActivityBroadcastReceiver.class);
intent.putExtra("id", this.getId());
pendingIntent = PendingIntent.getBroadcast(context, 1234565666, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, this.getCalendarTime().getTimeInMillis(), pendingIntent);
}
得到我使用下面的函數,時間是用戶輸入的時間字符串calendarTime:
private Calendar convertTimeStringToCalendar(){
String[] timeArray = this.time.split(":");
int minute = Integer.parseInt(timeArray[1]);
int hour = Integer.parseInt(timeArray[0]);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
int nowHour = c.get(Calendar.HOUR_OF_DAY);
int nowMinute = c.get(Calendar.MINUTE);
if (hour < nowHour || (hour == nowHour && minute <= nowMinute)) {
c.add(Calendar.DAY_OF_YEAR, 1);
}
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c;
}
最後,這是我的廣播接收器:
public class AlarmActivityBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
WakeLock.acquire(context);
Alarm alarm = DataBaseSQL.getAlarm(intent.getLongExtra("id", 0L));
Intent alarmActivityIntent = new Intent(context, AlarmActivity.class);
alarmActivityIntent.putExtra("id", alarm.getId());
alarmActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
context.startActivity(alarmActivityIntent);
}
}
我希望得到任何幫助,它可能只是有時只觸發警報的原因。
'和獲取數據的方法還設置了標誌,以保持屏幕on'左右,**殺用戶的電池**? –
不,這是一個鬧鐘,所以我需要屏幕直到用戶解散它! – Martina