iPhone und iPod touch Development
Posts 1-7 of 7
-
Daniel Kropf Premium MemberThe company name is only visible to registered members.Problem mit Scheduled Notification
Hallo allerseits
Ich versuche seit einigen Tagen meiner Kalender-App beizubringen, dass sie den aktuellen Tag als Badge auf dem Icon anzeigt, sofern der Benutzer dies denn wünscht (prefs). Dies ist kein Problem wenn ich die App starte und beende.
Leider scheint aber die scheduled notification, welche ich absetze damit die nicht laufende App automatisch den Tag wechselt, sobald der Tag wechselt (also kurz nach Mitternacht), irgendwie nicht zu funktionieren:
Scheduled Notification <UIConcreteLocalNotification: 0xa81bb80>{fire date = 2011-02-03 00:01:00 +0000, time zone = Europe/Zurich (GMT+01:00) offset 3600, repeat interval = 16, next fire date = 2011-02-04 00:01:00 +0000}
In meinen Anfänger-Augen sieht die eigentlich soweit gut aus, aber dennoch scheint es entweder in obiger notification oder aber im untigen "applicationDidEnterBackground" ein Problem zu geben:
- (void)applicationDidEnterBackgroundUIApplication *)application {
NSAssert(self->bgTask == UIBackgroundTaskInvalid, nil);
// NSLog(@"Did enter Background");
bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
dispatch_async(dispatch_get_main_queue(), ^{
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
});
}];
dispatch_async(dispatch_get_main_queue(), ^{
while ([application backgroundTimeRemaining] > 1.0) {
//NSString *friend = [self checkForIncomingChat];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"iconBadgeControl"]) {
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif) {
localNotif.alertBody = nil;
localNotif.alertAction = nil;
localNotif.soundName = nil;
DisDate *dd = [[DisDate alloc] initWithGregDate:[NSDate date]];
localNotif.applicationIconBadgeNumber = dd.day;
[application presentLocalNotificationNow:localNotif];
[localNotif release];
//friend = nil;
break;
}
}
}
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
});
}
Oder ist der Fehler grundsätzlich in meinem Verständnis dieses Konzepts? Andere Apps können das doch auch und ich hatte angenommen, die machen das eben über diese scheduled notification, aber vielleicht täusche ich mich da gewaltig? Andererseits heisst es ganz klar in der "UILocalNotification Class Reference":
"The operating system is responsible for delivering the notification at the proper time; the application does not have to be running for this to happen."
Hat irgend jemand Erfahrung in diesem Gebiet und könnte mir helfen?
Vielen Dank im Voraus.
Gruss und viel Spass
Daniel
- 03 Feb 2011, 9:15 pm
-
Olaf Japp Premium Member Group moderatorThe company name is only visible to registered members.Re: Problem mit Scheduled Notification
Daniel Kropf schrieb:
- (void)applicationDidEnterBackgroundUIApplication *)application {
Hi Daniel,
afaik werden keine Threads der Applikation mehr ausgeführt, sobald die Applikation in den Hintergrund verschwindet.
Damit eine Applikation im Background weiter läuft, muss dies in der der Info.plist mit UIBackgroundModes angemeldet werden.
Dies dient aber nur für folgende Typen: audio, location, voip
Siehe:
http://developer.apple.com/library/ios/#documentation/iPhone...
Olaf
- 03 Feb 2011, 11:13 pm
-
Daniel Kropf Premium MemberThe company name is only visible to registered members.Re^2: Problem mit Scheduled Notification
Hallo Olaf
Danke für deine Antwort, welche mir zeigt, dass ich mich völlig unverständlich ausgedrückt habe :-)
Wahrscheinlich ist mein Ansatz völlig falsch, deshalb beschreibe ich jetzt mal das Grundkonzept ohne in technische Details meines Implementationsversuches zu gehen:
Eine Kalenderapplikation (Beispiel aus dem Shop: miCal) erlaubt dem Benutzer per Einstellung zu wählen, ob der Tag des Monats (1-31) als Badge auf dem Icon angezeigt werden soll. Falls die App beim Tageswechsel um Mitternacht nicht läuft (was ja meist der Fall sein dürfte) soll aber dennoch die Zahl im Badge entsprechend angepasst werden (und wird auch im Falle von miCal).
Wie haben die das wohl gelöst, bzw. wie löse ich das am Besten bei meiner App?
Gruss und viel Spass
Daniel
- 04 Feb 2011, 2:45 pm
-
Post visible to registered members
-
Daniel Kropf Premium MemberThe company name is only visible to registered members.Re^4: Problem mit Scheduled Notification
Hallo Tanja
Herzlichen Dank für deine Antwort.
hast Du in der Notification überhaupt die Aktion definiert, die ausgeführt werden soll?
In Deinem Post sehe ich bei der Notification oben nur ein Datum, aber keine AlertAction?
alertAction, alertBody, etc. definieren nach meinem Verständnis ja nur die Texte, welche im Hinweisfenster angezeigt werden sollen. Ich will aber keinen Hinweis, sondern bloss den Badge aktualisieren.
Kann es sein, dass Deine Implementierung schon funktioniert, aber der angezeigte Wert einfach dem aktuellen entspricht?
Leider nicht, da das ja genau das wäre, was ich mir wünsche... Wenn ich am Vortag die App starte und beende, dann ist im Badge die aktuelle Zahl (z.B. 3) und am nächsten Morgen ist immer noch dieselbe Zahl drin (also wiederum z.B. 3) statt die aktuelle (im Beispiel jetzt eben 4).
Aber dennoch herzlichen Dank für deine beiden Hinweise, werde mal schauen, ob zumindest etwas passiert wenn ich mir doch ein Hinweisfenster anzeigen lasse...
Gruss und viel Spass
Daniel
- 04 Feb 2011, 3:57 pm
-
Post visible to registered members
-
Horst ThanbichlerThe company name is only visible to registered members.Re^6: Problem mit Scheduled Notification
Hallo Daniel,
wäre Dir dankbar, wenn Du kurz schreiben könntest, wie Du es nun gelöst hast. Habe nämlich aktuell das gleiche Problem (und wie Du das gleiche Verständnis von den Alerts).
Danke & Gruß
Horst
- 07 Jun 2011, 10:05 am
