我正在做一個應用程序,用於在指定時間內對設備鎖定和屏幕解鎖進行編程。 爲此,我使用AlarmManager啓動鎖定或解鎖屏幕的服務。一旦服務完成,它會設置AlarmManager在24小時後重複此操作,因此基本上您可以設置每天重複的計劃。取消應用程序關閉時的AlarmManager
問題是,如果用戶關閉應用程序,我想取消設置的每個警報管理器。我試圖在主要活動的onDestroy事件中做到這一點。但是當我關閉應用程序時它不會被調用。
我在服務中試過這個代碼來檢測應用程序是否在運行,如果它沒有運行,取消它的動作。但是,這不是一個正確的解決方案,因爲用戶可能已經完成了應用程序和服務運行前再次啓動它:
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningProcInfo = activityManager .getRunningAppProcesses();
for(int i = 0; i < runningProcInfo.size(); i++){
//Toast.makeText(this, runningProcInfo.get(i).processName, Toast.LENGTH_SHORT).show();
if(runningProcInfo.get(i).processName.equals("inusual.example.com.powercontrol2")) {
bAppRunning = true;
}
}
我如何能實現我想要的行爲?
編輯: 這是我如何設置AlarmManager:
String sTime = (String) aTimeTextViews[i].getText();
String sHour = sTime.substring(0, sTime.indexOf(":"));
String sMinute = sTime.substring(sTime.indexOf(":") + 1, sTime.length());
int iTimeInMinutes = (Integer.parseInt(sHour)*60) + Integer.parseInt(sMinute);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(sHour));
calendar.set(Calendar.MINUTE, Integer.parseInt(sMinute));
calendar.set(Calendar.SECOND, 0);
long timeInMillis = calendar.getTimeInMillis();
if (iTimeInMinutes<=currentTimeInMinutes)
{
timeInMillis += 24*60*60*1000;
}
int iOnOff = aSpinners[i].getSelectedItemPosition();
alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent;
if (iOnOff==0)
intent = new Intent(this, Serviceunlock.class);
else
intent = new Intent(this, Servicelock.class);
alarmIntent = PendingIntent.getService(this, 0, intent, 0);
//alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis() ,
// AlarmManager.INTERVAL_DAY, alarmIntent);
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeInMillis , alarmIntent);
你用'onBackPressed()'事件嘗試取消報警:
我對這個答案發現了這一點? – Riad
如何設置鬧鐘? –