Notifications absetzen zu bestimmten Zeitpunkten

Jaiel

Jaiel

Dauergast
235
Hey ich habe noch ncihts mit Services oder Notifications gemacht.

Ich möchte folgendes machen:

In meiner App soll es ein Button geben mit dem ich Notifications an und ausmachen kann. Es soll auch nur eine Notification geben.

Es soll entweder 1. jeden Tag zu einem bestimmten Zeitpunkt eine abgesetzt werden oder 2. anch einer bestimmten Zeit seit dem die App aufgemacht wurde.

zu 1. würde ich mir etwas mit dem Alarmmanager vorstellen können und halt dias Ereignis setzen oder das Ereignis löschen je anch Buttonpress bzw. bei druck auf dem Button toggeln.

zu 2. einen Service starten falls nciht schon einer läuft beim verlassen der App aber nunja das schwierige wäre da wohl herauszufinden wann die App verlassen wird bzw. in welcher Activity oder einfach einen service starten starten wenn die app aufgemacht wird, was wohl am unkompliziertesten wäre.

Zu was würdet ihr mir raten?

Und noch mal eine Frage:

Wie kann ich einen Service der schon läuft erkennen, beenden und stattdessen einen neuen starten? Wie läuft das so?

Und wie kann ich verhindern dass eine Notification abgesetzt wird wenn immer noch eine vorherige aktiv in der Anzeige ist?

Es soll einfach eine Notification sein wie :"Hey die App fühlt sich ungeliebt sie möchte wieder gestartet werden, lets go"

Danke schon mal im Vorraus!
 
Hi,

da ich mich SEHR viel damit beschäftigt habe ist der AlarmManager schon das richtige.
Die App verlassen funktioniert ab Android 4 am besten über einen Lifecyclehandler:
public class LifecycleHandler implements Application.ActivityLifecycleCallbacks
Quelle: Checking if an Android application is running in the background - Stack Overflow

Zitat:
Und wie kann ich verhindern dass eine Notification abgesetzt wird wenn immer noch eine vorherige aktiv in der Anzeige ist?

Dafür musst du ein wenig mit den Flags vom NotificationManager oder PendingIntent spielen:
PendingIntent.getActivity( this,0, intent2,PendingIntent.FLAG_UPDATE_CURRENT);
noti.flags |= Notification.FLAG_AUTO_CANCEL;

Viel Erfolg.
 
  • Danke
Reaktionen: Jaiel
Vielen Dank für die Infos werde es dann wohl so machen. Falls ich nicht wissen sollte wie man einen eingetragenen Alarm löscht bzw. aufspürt melde ich mcih nochmal :)
 
Hallo

Ich hab mal ne Frage zum Alarmmanager

Ich habe die API mal studiert und diese EMthode scheint die richtige für mich : AlarmManager | Android Developers, long, long, android.app.PendingIntent)

Ich würde es gerne so amchen:

setInexactRepeating (AlarmManager.ELAPSED_REALTIME||AlarmManager.ELAPSED_REALTIME_WAKEUP,
triggerAtMillis, AlarmManager.INTERVAL_DAY, PendingIntent operation)

Hab da gleich mehrere Fragen zu:

1. Ist die MEthode in Ordnung für meine Wünsche?
2. AlarmManager.ELAPSED_REALTIME oder Alarmmanager.RTC? Soweit ich das verstanden habe ist das erste die Uhrzeit in millisekunden und die 2. die Uhrzeit so wie z.B. 15 Uhr?! Wie gebe ich die Uhrzeit an ind iesem Format?
3. Wo soll ich den Code für die Aktion eine Notification abzusetzen hin schreiben?
Sollte ich da eine Activity implementieren die auf mein Intent reagiert?
z.B. so:
PHP:
            <intent-filter>
                <action android:name="android.intent.action.MY_ACTION" />
                <category android:name="android.intent.category.MY_CATEGORY" />
            </intent-filter>

Ich weiß nur wie man Activities startet und wie man die Hauptactivity setzt...
 
Ich dreh gleich durch...ich krieg das irgendwie nicht gerafft:


Hab jetzt eine Broadcastreceiver Klasse erstellt und versuche vergeblich in der onReceive methode eine Notification aufzubauen mit dem Notification.Builder


leider amche ich da etwas falsch

PHP:
public void onReceive(Context context, Intent intent) {
//		// TODO Auto-generated method stub
		NotificationCompat.Builder mBuilder =
		        new NotificationCompat.Builder(context)
		        .setSmallIcon(R.drawable.star)
		        .setContentTitle("My notification")
		        .setContentText("Hello World!");
		// Creates an explicit intent for an Activity in your app
		Intent resultIntent = new Intent(context, SplashScreenActivity.class);

		// The stack builder object will contain an artificial back stack for the
		// started Activity.
		// This ensures that navigating backward from the Activity leads out of
		// your application to the Home screen.
		TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
		// Adds the back stack for the Intent (but not the Intent itself)
		stackBuilder.addParentStack(SplashScreenActivity.class);
		// Adds the Intent that starts the Activity to the top of the stack
		stackBuilder.addNextIntent(resultIntent);
		PendingIntent resultPendingIntent =
		        stackBuilder.getPendingIntent(
		            0,
		            PendingIntent.FLAG_UPDATE_CURRENT
		        );
		mBuilder.setContentIntent(resultPendingIntent);
		NotificationManager mNotificationManager =
		    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
		// mId allows you to update the notification later on.
		mNotificationManager.notify(1, mBuilder.build());
	}

stackBuilder braucht aber API 16...ich möchte aber mindestens API 11 -13 verwenden...

Wie kann cih das Lösen bitte hilfe!!!!!
 
Ok ich hab das jetzt ohne einen Backstack gemacht hier der Code:


PHP:
public class DotBroadcastReceiver extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
//		// TODO Auto-generated method stub
		
		createNotification(context,"Title","Text");
		
	}
	
	
	public void createNotification(Context context,String contentTitle,String contentText)
	{
		PendingIntent pendingIntent=PendingIntent.getActivity(context,0,new Intent(context,SplashScreenActivity.class),0);
		
		NotificationCompat.Builder notificationBuilder=new NotificationCompat.Builder(context)
															.setSmallIcon(R.drawable.star)
															.setContentTitle(contentTitle)
															.setContentText(contentText);

		notificationBuilder.setContentIntent(pendingIntent);
		notificationBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
		notificationBuilder.setAutoCancel(true);
		
		NotificationManager notificationManager=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
		notificationManager.notify(1, notificationBuilder.build());
													
	}

}


Anmerkung: nur für explizite Intents gedacht die ausserhalb einer Activity aufgerufen werden müssen
 
Sorry Jaiel,

ich habe jetzt erst in meinen Mails gesehen, dass du noch was hinzugeschrieben hattest.

Ich hätte dir in dem Fall wirklich helfen können.
Dein Anwendungsfall aber gefällt mir, und das du deinen Code geteilt hast auch.

Mein Anwendungsfall war viel komplizierter:
Ich musste eine konfigurierbares Schnittstelle zu den Notifications erstellen, weil der Benutzer die Wiederholungen und auch die Uhrzeiten selbst erstellen konnte.
Also sowas wie:
Erinnere mich jeden Mittwoch, Freitag und Samstag um 08:00 Uhr und 12:00 Uhr. (Dabei musste es auch noch exakt sein, also konnte ich nicht mit repeat arbeiten)
Auch sollte es dann in 15 Minuten Schritten 4 mal daran erinnert werden.
Also es sollte eine Notification um 08:00 Uhr, 08:15 Uhr etc. angezeigt werden.

Wenn der Benutzer aber die App um 08:06 öffnet, durften bis 12 Uhr keine Notifications mehr kommen etc.

Ich habe da über 12 Stunden nur an dieser Thematik gesessen, weswegen ich mich jetzt ein wenig besser auskenne :)
 

Ähnliche Themen

S
Antworten
0
Aufrufe
592
Sergio13
S
A
Antworten
1
Aufrufe
584
swa00
swa00
R
Antworten
9
Aufrufe
735
koje71
koje71
Zurück
Oben Unten