I made an app that has custom notifications, but I cant remove them no matter what I do.
[[UIApplication sharedApplication] cancelLocalNotification:[idkey objectAtIndex:indexPath.row]];
That is the code I use for removal; If I use all it works. The idkey is the correct
value, and its a number in a string, #"3" in this case.
This is a part of the saving function:
-(void) addNewNotificationWithKey:(NSString*)key {
NSLog(#"%#",key);
Class cls = NSClassFromString(#"UILocalNotification");
if (cls != nil) {
UILocalNotification *notif = [[cls alloc] init];
notif.fireDate = [tempFormatter dateFromString:datuminura];
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.alertBody = description1;
notif.alertAction = #"Open";
notif.soundName = UILocalNotificationDefaultSoundName;
Is it right?
Check which notification you want to remove and use following code to cancel it.
UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
NSString *uid=[NSString stringWithFormat:#"%#",[userInfoCurrent valueForKey:#"uid"]];
if ([uid isEqualToString:uidtodelete])
{
//Cancelling local notification
[app cancelLocalNotification:oneEvent];
break;
}
}
[EDIT]
Add following line into your local notification to make [uid isEqualToString:uidtodelete] condition work.
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:#"%d",[idkey objectAtIndex:indexPath.row]] forKey:#"uid"];
notif.userInfo = infoDict;
Related
In my app i am getting data using some network connection
i want to show that data in notification bar (status bar) in iPhone
so how to add data that i can see in status bar of iPhone when i drag it down
i search many tutorials but i did not find any good one please help me
Please tell me some ideas that i can manage my data in notification or any good tutorial
Please suggest any good tutorial so i can manage my dynamic data in notification bar
Thanks
After getting data:
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = date; // date after 10 sec from now
localNotif.timeZone = [NSTimeZone defaultTimeZone];
// Notification details
localNotif.alertBody = text; // text of you that you have fetched
// Set the action button
localNotif.alertAction = #"View";
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 1;
// Specify custom data for the notification
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:#"someValue" forKey:#"someKey"];
localNotif.userInfo = infoDict;
// Schedule the notification
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
To handle onclick of Noification:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// Add the view controller's view to the window and display.
[window addSubview:viewController.view];
[window makeKeyAndVisible];
application.applicationIconBadgeNumber = 0;
// Handle launching from a notification
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotif) {
NSLog(#"Recieved Notification %#",localNotif);
}
return YES;
}
- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif {
// Handle the notificaton when the app is running
NSLog(#"Recieved Notification %#",notif);
}
i think, uilocalnotificatios are deprecated. now you can use, UNUserNotificationCenter. we can add image to it as well as shown below:
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert + UNAuthorizationOptionSound;
[center requestAuthorizationWithOptions:options
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!granted) {
//NSLog(#"Something went wrong");
}
}];
int dayCounter =5;
int minute = 48;
{
NSDateComponents *components = [[NSDateComponents alloc] init];
components.weekday = dayCounter;
dayCounter++;
components.hour = 12;
components.minute = minute;
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];
UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
objNotificationContent.title = [NSString localizedUserNotificationStringForKey:#"Notification!" arguments:nil];
objNotificationContent.body = [NSString localizedUserNotificationStringForKey:#"We made a surprise Edit for You" arguments:nil];
objNotificationContent.sound = [UNNotificationSound defaultSound];
objNotificationContent.badge = #([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
UNNotificationAttachment *attachment = nil;
NSURL* outputURL = [[NSURL alloc] initFileURLWithPath:filePath];
NSError *attachmentError = nil;
attachment = [UNNotificationAttachment attachmentWithIdentifier:#"image"
URL: outputURL
options:nil
error:&attachmentError];
if (attachmentError) {
return;
}
objNotificationContent.attachments=#[attachment];
NSString *identifier = #"UYLLocalNotification";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier
content:objNotificationContent trigger: trigger];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(#"Something went wrong: %#",error);
}
else
{
}
}];
I have the following code in ViewController.m:
-(void) checker {
UILocalNotification *notification = [[UILocalNotification alloc] init];
[notification setAlertBody: #"Im your local notification"];
[notification setFireDate: [NSDate dateWithTimeIntervalSinceNow: 1]];
[notification setTimeZone: [NSTimeZone defaultTimeZone]];
[UIApplication setScheduledLocalNotifications: [NSArray arrayWithObject: notification]];
}
The last line produces a warning:
Class method '+setScheduledLocalNotifications' not found (return type defaults to id)
and it gives error while processing. How can I instantiate the notification? As I said I am new, if you can provide a complete answer it will be greatly appreciated.
Edit: I have a timer that repeats itself every 60 seconds and calls a function that puts a notification.
timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:#selector(checker) userInfo:nil repeats:YES];
/* ... */
-(void)checker {
NSLog(#"Notification routine");
UIApplication* app = [UIApplication sharedApplication];
NSArray *oldNotifications = [app scheduledLocalNotifications];
// Clear out the old notification before scheduling a new one.(if needed)
if ([oldNotifications count] > 0)
[app cancelAllLocalNotifications];
// Create a new notification.
UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];
if (alarm) {
alarm.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];
alarm.timeZone = [NSTimeZone defaultTimeZone];
alarm.repeatInterval = 0;
alarm.alertBody = #"Msg to show";
[app scheduleLocalNotification:alarm];
}
}
I can see the log only firing once a minute, but the oldNotifications count does not increase.
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
the '+' in the error message means it is trying to call a class method rather than an instance method. The [UIApplication sharedApplication] call will return the singleton instance of the application object that allows you to call that method as an instance method.
Also you should read the documentation for UIApplication. You just need to call scheduleLocalNotification: with the notification object to get it scheduled. This will allow you to release the memory to the object, because the schedule method will copy the object.
This is how I do it,
UIApplication* app = [UIApplication sharedApplication];
NSArray *oldNotifications = [app scheduledLocalNotifications];
// Clear out the old notification before scheduling a new one.(if needed)
if ([oldNotifications count] > 0)
[app cancelAllLocalNotifications];
// Create a new notification.
UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];
if (alarm)
{
alarm.fireDate = [NSDate dateWithTimeIntervalSinceNow:60*60];//afterone hour
alarm.timeZone = [NSTimeZone defaultTimeZone];
alarm.repeatInterval = 0;
alarm.soundName = #"alarmsound.caf";
alarm.alertBody = #"Msg to show";
[app scheduleLocalNotification:alarm];
}
update:
- (void)scheduleAlarmForDate:(NSDate*)theDate andBody:(NSString*)Body
{
UIApplication* app = [UIApplication sharedApplication];
NSArray *oldNotifications = [app scheduledLocalNotifications];
// Clear out the old notification before scheduling a new one.
if ([oldNotifications count] > 0)
[app cancelAllLocalNotifications];
// Create a new notification.
UILocalNotification* alarm = [[UILocalNotification alloc] init];//Using ARC no autorelease
if (alarm)
{
alarm.fireDate = theDate;
alarm.timeZone = [NSTimeZone defaultTimeZone];
alarm.repeatInterval = 0;
alarm.soundName = #"alarmsound.caf";
alarm.alertBody = Body;
[app scheduleLocalNotification:alarm];
}
}
now if I call this method twice,
NSDate *fireDate1 = [NSDate dateWithTimeIntervalSinceNow:4.0];
[self scheduleAlarmForDate:fireDate1 andBody:#"My alertBody 1"];
NSDate *fireDate2 = [NSDate dateWithTimeIntervalSinceNow:6.0];
[self scheduleAlarmForDate:fireDate2 andBody:#"My alertBody 2"];
the first alarm will be canceled,,
I am setting local notifications, for a particular date and time, for some rows in my table. So consider
case 1: When the user is setting the local notifications for first time, he selects the date from date picker, which, I pass it to the local notification object firedate.
NSArray *notificationarray = [[UIApplication sharedApplication]scheduledLocalNotifications];
if([notificationarray count]== 0)
{
m_alarmLocalNotification = [[UILocalNotification alloc] init];
m_alarmLocalNotification.fireDate = DateTime;
m_alarmLocalNotification.timeZone = [NSTimeZone defaultTimeZone];
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:m_Name forKey:#"ID"];
m_alarmLocalNotification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:m_alarmLocalNotification];
case2: Modifying the local notiification date.
NSArray *notificationarray = [[UIApplication sharedApplication]scheduledLocalNotifications];
for (int i = 0;i < [notificationarray count];i++)
{
UILocalNotification *notificationObject=[notificationarray objectAtIndex:i];
NSString *Name=[notificationObject.userInfo valueForKey:#"ID"];
if(Name isEqualToString:m_Name])
{
[[UIApplication sharedApplication] cancelLocalNotification:notificationObject];
m_alarmLocalNotification = [[UILocalNotification alloc] init];
m_alarmLocalNotification.fireDate = DateTime;
m_alarmLocalNotification.timeZone = [NSTimeZone defaultTimeZone];
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:m_noteName forKey:#"ID"];
m_alarmLocalNotification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:m_alarmLocalNotification];
}
else
{
m_alarmLocalNotification = [[UILocalNotification alloc] init];
m_alarmLocalNotification.fireDate = DateTime;
m_alarmLocalNotification.timeZone = [NSTimeZone defaultTimeZone];
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:m_noteName forKey:#"ID"];
m_alarmLocalNotification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:m_alarmLocalNotification];
}
}
Case 3: deleting the local notiification.
NSArray *notificationarray = [[UIApplication sharedApplication]scheduledLocalNotifications];
NSLog(#"notification count:%d",[notificationarray count]);
for (int i = 0;i < [notificationarray count];i++)
{
UILocalNotification *notificationObject=[notificationarray objectAtIndex:i];
NSString *Name=[notificationObject.userInfo valueForKey:#"ID"];
if([Name isEqualToString:m_Name])
{
[[UIApplication sharedApplication] cancelLocalNotification:notificationObject];
}
}
Problems faced.
0) I am not sure whether I am doin it the right way.
1)The default schedulednotification array doesn't get deallocated even if I delete my app and reinstall it once again.I mean it contains some previous notifications.
2)whenever I delete my cells I want the local notification should get deleted.
Regards
Ranjit
How about the things are going if you use below code while modification of notification
NSArray *notificationarray = [[UIApplication sharedApplication] scheduledLocalNotifications];
[notificationarray enumerateObjectsUsingBlock:^(UILocalNotification *notification,NSUInteger idx, BOOL *stop) {
if ([[notification.userInfo valueForKey:#"ID"] isEqual:#""]) {
notification.fireDate = [NSDate date];
}
}];
I am new in iPhone application development. Now i am developing alarm application for iPhone. In this application i am selected data from UIDataPicker. Then i applied to NSLocalNotification firedate with in alarm button action. It is working first time. Then second time agin click that button i again also working, but time also same. It is wrongly working.
Here i think i need to us NSTimer. I don't know how to use NSTimer, and also it is working background application also how to set this timer.
following developed code for alarm notification.
- (void) saveButtonAction:(id)sender {
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Class cls = NSClassFromString(#"UILocalNotification");
if (cls != nil)
{
Resource *resourceLoader = [[Resource alloc] init];
NSDictionary *prefDic = [resourceLoader getPlistDataAsDictionary:#"preference"];
NSString *musicName;
NSDate *selectedDateTime = [[NSDate alloc]init];
if (prefDic && [prefDic objectForKey:#"alarmtime"]) {
//firstVal_textField.text = [prefDic objectForKey:#"value1"];
NSLog(#"saravanan %#",[prefDic objectForKey:#"alarmtime"]);
selectedDateTime = [prefDic objectForKey:#"alarmtime"];
NSLog(#"saravanan periyasamy %#", selectedDateTime);
musicName = [NSString stringWithFormat:#"%#%#",[prefDic objectForKey:#"alarmmusic"],#".wav" ];
}
UILocalNotification *notif = [[cls alloc] init];
//notif.fireDate = [datePicker date];
notif.fireDate = selectedDateTime;
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.alertBody = #"Alarm";
notif.alertAction = #"Show me";
//notif.repeatInterval = 0;
//notif.soundName = UILocalNotificationDefaultSoundName;
notif.soundName = musicName;
notif.applicationIconBadgeNumber = 1;
NSDictionary *userDict = [NSDictionary dictionaryWithObject:#"saravanan"
forKey:kRemindMeNotificationDataKey];
notif.userInfo = userDict;
[[UIApplication sharedApplication] scheduleLocalNotification:notif];
[notif release];
}
}
}
The set button is wired up to run a
method called
scheduleNotification in the
view controller which uses the
UILocalNotification class to
schedule a notification. The code
looks as follows:
(void )scheduleNotification
{
[reminderText resignFirstResponder];
[[ UIApplication sharedApplication] cancelAllLocalNotifications];
Class cls = NSClassFromString(# "UILocalNotification" );
if (cls != nil)
{
UILocalNotification *notif = [[cls alloc] init];
notif.fireDate = [datePicker date];
notif.timeZone = [ NSTimeZone defaultTimeZone];
notif.alertBody = # "Did you forget something?" ;
notif.alertAction = # "Show me" ;
notif.soundName = UILocalNotificationDefaultSoundName ;
notif.applicationIconBadgeNumber = 1 ;
NSDictionary *userDict = [ NSDictionary dictionaryWithObject:reminderText.text
forKey:kRemindMeNotificationDataKey];
notif.userInfo = userDict;
[[ UIApplication sharedApplication] scheduleLocalNotification:notif];
[notif release];
}
}
I am new in iPhone application development. I am doing alarm application. In this application I am using local notification. I am calling notification method in done button action. Now I clicked done button means notification fired correctly. Then again clicked mean also fired, again and again press means working wrongly, but I am used notification fire date time same time. In this time completed means again user click done button means again triggered notification.
I want to fire that particular time. Can you please help me.
Here I am using this source code.
-(IBAction)doneButton
{
[self scheduledNotification];
}
-(void)scheduledNotification
{
Resource *resourceLoader = [[Resource alloc] init];
NSDictionary *prefDic = [resourceLoader getPlistDataAsDictionary:#"preference"];
if ([#"ON" isEqualToString:[prefDic objectForKey:#"alarm"]])
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Class cls = NSClassFromString(#"UILocalNotification");
if (cls != nil)
{
NSString *musicName;
//NSDate *selectedDateTime = [[NSDate alloc]init];
selectedDateTime = [prefDic objectForKey:#"alarmtime"];
NSLog(#"saravanan periyasamy %#", selectedDateTime);
musicName = [NSString stringWithFormat:#"%#%#",[prefDic objectForKey:#"alarmmusic"],#".wav" ];
NSLog(#"musicname %#", musicName);
NSLog(#"saravanan periyasamy123 %#", selectedDateTime);
UILocalNotification *notif = [[cls alloc] init];
notif.fireDate = selectedDateTime; /* time for fireDate*/
NSLog(#"selectedtime %#",selectedDateTime);
notif.timeZone = [NSTimeZone systemTimeZone];
notif.alertBody = #"Alarm";
notif.alertAction = #"Show me";
notif.repeatInterval = 0;
notif.soundName = musicName;
notif.applicationIconBadgeNumber = 1;
NSDictionary *userDict = [NSDictionary dictionaryWithObject:#"saravanan"
forKey:kRemindMeNotificationDataKey];
notif.userInfo = userDict;
[[UIApplication sharedApplication] scheduleLocalNotification:notif];
[notif release];
}
}
}
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
Class cls = NSClassFromString(#"UILocalNotification");
if (cls) {
UILocalNotification *notification = [launchOptions objectForKey:
UIApplicationLaunchOptionsLocalNotificationKey];
if (notification) {
NSString *reminderText = [notification.userInfo
objectForKey:kRemindMeNotificationDataKey];
//[self.viewController showReminder:reminderText];
[self.settingViewController showReminder1:reminderText];
}
}
application.applicationIconBadgeNumber = 0;
return YES;
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
application.applicationIconBadgeNumber = 0;
}
- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification {
application.applicationIconBadgeNumber = 0;
NSString *reminderText = [notification.userInfo
objectForKey:kRemindMeNotificationDataKey];
//[self.viewController showReminder:reminderText];
[self.settingViewController showReminder1:reminderText];
}
hi i not understand what your question but here i post my one example code for LocalNotification just compare it or use this example....
here when user click done button then call "btnGo_Clicked" method
-(IBAction)btnGo_Clicked:(id)sender{
NSLog(#"\n ----------->>Go Clicked");
Class cls = NSClassFromString(#"UILocalNotification");
if (cls != nil) {
NSString *kRemindMeNotificationDataKey = #"kRemindMeNotificationDataKey";
NSDateComponents *dc = [[NSCalendar currentCalendar] components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSQuarterCalendarUnit fromDate:[exdatePicker date]];
[dc setDay:dc.day - 1];
NSDate *noticeDate = [[NSCalendar currentCalendar] dateFromComponents:dc];
NSDateFormatter* dateFormatterstring = [[NSDateFormatter alloc] init];
[dateFormatterstring setDateFormat:#"dd-MM-yyyy hh:mm:ss a"];
NSString *dateString = [dateFormatterstring stringFromDate:noticeDate];
txtExpirayDate.text = dateString;
UILocalNotification *notification = [[cls alloc] init];
notification.fireDate = noticeDate;
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.alertBody = [NSString stringWithFormat:#"%# your Licence Expiry Date is Tommorow",txtLicence.text];
notification.alertAction = #"Show me";
notification.soundName = UILocalNotificationDefaultSoundName;
notification.applicationIconBadgeNumber = 1;
NSDictionary *userDict = [NSDictionary dictionaryWithObject:txtLicence.text forKey:kRemindMeNotificationDataKey];
notification.userInfo = userDict;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
[notification release];
}
exdatePicker.hidden=YES;
}
do some changes and you got your output
i hope this answer help you...
:)
Remove this line if you want multiple press on button.
[[UIApplication sharedApplication] cancelAllLocalNotifications];
because its removing your all previous notifications.