AlarmManager jeden Tag um 15 Uhr

  • 4 Antworten
  • Letztes Antwortdatum
C

Chucky109

Neues Mitglied
0
Hi,
ich möchte in meiner App beim 1. Aufruf der App einen AlarmManager starten, der dann jeden Tag um 15 Uhr eine Aktion ausführt. Soweit hab ich da auch schon was:

Code:
AlarmManager alarmMgr0 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
		Intent intent0 = new Intent(this, AlarmReceiver.class);
		PendingIntent pendingIntent0 = PendingIntent.getBroadcast(this, 1234567, intent0, PendingIntent.FLAG_CANCEL_CURRENT);

		Calendar timeOff9 = Calendar.getInstance();
		timeOff9.set(Calendar.HOUR_OF_DAY, 15);
		timeOff9.set(Calendar.MINUTE, 0);
		timeOff9.set(Calendar.SECOND, 0);
		
		alarmMgr0 .setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
		        timeOff9.getTimeInMillis() + AlarmManager.INTERVAL_DAY,
		        AlarmManager.INTERVAL_DAY, pendingIntent0);

Das Ganze hab ich in eine Funktion gepackt, die beim start der App im onCreate() Teil der Main.java Klasse aufgerufen wird. Nun stellen sich mir aber ein paar logische Probleme: Er würde ja nun jedes mal wenn die App startet diesen AM setzen, das ja nicht das Ziel ist. Er soll beim 1. Start der App gesetzt werden und dann durch das .setInexactRepeating sich jeden Tag wiederholen. Kann mir da mal jemand auf die Sprünge helfen? Und ist der Code so wie er ist richtig und würden sich dann da auch noch Fehler aufbauen? Konnte es ja noch nicht wirklich testen aufgrund der anderen Denkprobleme^^

Chucky109
 
Du könntest eine eigene Methode schreiben die überprüft, od der AlarmManager schon gesetzt wurde:
Code:
public class MainActivity extends Activity{
public int check;
public void onCreate
{
check += 1;
//Dein Code
//check in SharedPreferences Speichern
onCheck();
}
public void onCheck()
{
//check mit SharedPreferences laden
if(check == 0)
{
//AlertManager hier rein
}else
if(!check == 0)
{

}
}
}
Wie SharedPreferences benutzt (oder geschrieben) wird weiss ich leider nicht :(
Hoffe ich konnte helfen und dass alles so passt :)
 
Sobald das Handy jedoch Rebootet wird ist der Alarm soweit ich weiß ja weg, aber der werd in SP immer noch da, das würde zum Problem werden. Ansonsten ist die Idee relativ gut
 
Du kannst noch programmieren, das.etwas nach dem reboot aus geführt wird. Das wäre dann:
Code:
public class BootActivity extends BroadcastReceiver {
    static final String ACTION = "android.intent.action.BOOT_COMPLETED"; 
public int check = MainActivity.check;  

public void onReceive(Context context, Intent intent) 
{   
if(intent.getAction().equals(ACTION)) 
{
//Hier versuchen check =0; in die SharedPreferences zu packen
}
}//Idee kommt von stackoverflow.com
 
Zuletzt bearbeitet von einem Moderator:
Also du kannst über die vergebene ID (1234567) auch deinen Alarm canceln (AlarmManager -> Cancel, AlarmManager | Android Developers). Kannst dir also überlegen, statt einer Prüfung per SharePrefs, einfach immer zu canceln und dann neu den Alarm anzulegen. Letztlich Wurst, wie du es machst.

Das Reboot-Problem wird damit gelöst, indem du einen Service o.ä. startest, wenn Android gebootet wurde und den Alarm neu setzt (Stichwort: BOOT_COMPLETED-Event).
 
Zurück
Oben Unten