AlarmManager verwenden, um Service zu starten

L

lewa19

Neues Mitglied
0
Hallo. Ich habe eine App, in der ich zu einer bestimmten Zeit eine automatische Benachrichtigung (Notification) in der Android Benachrichtigungsleiste anzeigen will, so, wie wenn man etwa bei Whatsapp eine Nachricht bekommt. Das ganze soll natürlich vor allem dann funktionieren, wenn die App gerade nicht verwendet wird. Aber es funktioniert gar nicht, auch nicht, wenn ich die App geöffnet habe, sondern nur beim Öffnen und Schließen der App. Hier ist mein Code der Activity:
Code:
Intent myIntent = new Intent(MainActivity.this , NotificationSetter.class);     
		AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
		PendingIntent pending;
		pending = PendingIntent.getService(MainActivity.this, 0, myIntent, 0);

		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, 12);
		calendar.set(Calendar.MINUTE, 00);
		calendar.set(Calendar.SECOND, 00);

      	alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000 , pending);
Und hier der Code von meinem Service:
Code:
public class NotificationSetter extends Service
{
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
	
	@Override
	public void onCreate()
	{
		// TODO: Implement this method
		super.onCreate();
		Intent intent = new Intent(this, MainActivity.class);
		PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
		Notification n  = new Notification.Builder(this)
			.setContentTitle("Titel")
			.setContentText("Info")
			.setSmallIcon(R.drawable.ic_launcher)
			.setContentIntent(pendingIntent)
			.setAutoCancel(true)
			.addAction(R.drawable.ic_launcher, "Öffnen", pendingIntent).build();


		NotificationManager notificationManager = 
			(NotificationManager) getSystemService(NOTIFICATION_SERVICE);

		notificationManager.notify(0, n); 
	}
	
}
Was muss ich ändern? Vielen Dank!

Der ursprüngliche Beitrag von 14:19 Uhr wurde um 15:00 Uhr ergänzt:

Ich habed das Problem wie folgt gelöst: In meinem Service habe ich ein Runnable geschrieben, dass sich alle 5 Sekunde wiederholt (die Zeit kann man ja ändern, alle 5 Sekunden eine Benachrichtigung wäre ja voll nervig :rolleyes2: ). Wird der Service beendet, startet er sich automatisch neu, er läuft also immer. Code von meinem Service:
Code:
public class NotificationSetter extends Service
{
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
	
	@Override
	public void onCreate()
	{
		// TODO: Implement this method
		super.onCreate();
		handler.postDelayed(updateNotification, 5000);
	}
	private Handler handler=new Handler();
	private Runnable updateNotification=new Runnable(){

		@Override
		public void run()
		{
			// TODO: Implement this method
			Intent intent = new Intent(NotificationSetter.this, Erinnerungen.class);

			PendingIntent pendingIntent = PendingIntent.getActivity(NotificationSetter.this, 0, intent, 0);

			Notification n  = new Notification.Builder(NotificationSetter.this)
				.setContentTitle("Erinnerung")
				.setContentText("Nächste Erinnerung")
				.setSmallIcon(R.drawable.logo_cnow)
				.setContentIntent(pendingIntent)
				.setAutoCancel(true)
				.addAction(R.drawable.ic_launcher, "Ansehen", pendingIntent).build();


			NotificationManager notificationManager = 
				(NotificationManager) getSystemService(NOTIFICATION_SERVICE);

			notificationManager.notify(0, n);
			handler.removeCallbacks(updateNotification);
			handler.postDelayed(updateNotification, 5000);
		}

		
	};

	@Override
	public void onDestroy()
	{
		// TODO: Implement this method
		Intent in=new Intent(NotificationSetter.this, NotificationSetter.class);
		startService(in);
	}
	
}
In der MainActivity wird der Service beim ersten Aufrufen der App gestartet:
Code:
Intent myIntent = new Intent(Erinnerungen.this , NotificationSetter.class);     
		startService(myIntent);
Allerdings ist diese Lösung wahrscheinlich nicht optimal. Wenn irgendjemand noch etwas besseres weiß, würde ich mich über Hilfe freuen:)
 
Zuletzt bearbeitet:
Der Service startet sich aber nur wieder neu solange die app läuft oder?
Mein Vorsvchlag wäre jetzt zwei Services zu amchen die aufeinander aufpassen: wird der eine Service beendet startet ihn der andere sofort wieder und umgekehrt
 
Danke für die Antwort. Ich bin mir nicht ganz sicher, ob ich rechthabe, aber im OnDestroy() steht doch, dass der Service gestartet werden soll, sobald OnDestroy() aufgerufen wird. Das heißt doch, dass der Service gestartet wird, wenn er beendet wird. Oder? Keine Ahnung. Es funktioniert bisher auch, wenn die App nicht gestartet ist.
 
Hallo. Ich weiß, ich hab schon mal eine ähnliche Frage gestellt, aber damals glaubte ich, daß Problem gelöst zu haben, was sich als falsch herausgestellt hat. Das steht in dem Code in der Activity, um den Service um 19:40 zu starten:
Code:
		Intent myIntent = new Intent(this , NotificationSetter.class);     
		AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
		pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);

		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MINUTE, 40);
		calendar.set(Calendar.HOUR, 19);

		alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60*60*24 , pendingIntent);
Und das der Code in meinem Service, um die Notification zu senden:
Code:
NotificationManager mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
		Notification notification = new Notification(R.drawable.logo_cnow, "Erinnerung", System.currentTimeMillis());
		Intent myIntent = new Intent(this , Erinnerungen.class);     
		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, myIntent, 0);
		notification.setLatestEventInfo(this, "Notify label", "Notify text", contentIntent);
		mNM.notify(0, notification);
Aber um 19:40 kommt nichts, stattdessen beim Beenden und manchmal auch beim Starten der App. Ich habe den Code 1:1 aus Stackoverflow, da hätte er angeblich funktioniert. Was mache ich falsch? Danke im voraus!
 

Ähnliche Themen

Laser5001
  • Laser5001
Antworten
2
Aufrufe
901
Laser5001
Laser5001
M
  • MikelKatzengreis
Antworten
10
Aufrufe
232
swa00
swa00
A
  • AnimaAngelo85
Antworten
1
Aufrufe
337
swa00
swa00
Zurück
Oben Unten