AppDelegate.m
-------------------
@implementation AppDelegate
//只有当应用在前台时,该方法才会被调用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
//如果应用程序在前台,将应用程序图标上红色数字设为0
application.applicationIconBadgeNumber = 0;
//使用UIAlertView显示本地通知的信息
[[[UIAlertView alloc]initWithTitle:@"收到通知" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
-----------------------------------
#import "ViewController.h"
@interface ViewController ()
{
UIApplication *app;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
app = [UIApplication sharedApplication];
}
- (IBAction)changed:(id)sender{
UISwitch *sw = (UISwitch *)sender;
if (sw.on) {
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
//创建一个本地通知
UILocalNotification *notification = [[UILocalNotification alloc]init];
//设置通知的触发时间
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:20];
//设置通知的时区
notification.timeZone = [NSTimeZone defaultTimeZone];
//设置通知的重复发送的时间间隔
notification.repeatInterval = kCFCalendarUnitMinute;
//设置通知的声音
notification.soundName = @"";
//通知标题
notification.alertTitle=@"啦啦啦";
// 设置当设备处于锁屏状态时,显示通知的警告框下方的title
notification.alertAction = @"OPEN";
// 设置通知是否可显示Action
notification.hasAction = YES;
// 设置通过通知加载应用时显示的图片
notification.alertLaunchImage = @"";
// 设置通知内容
notification.alertBody = @"主人,妞妞想你了!";
// 设置显示在应用程序上红色徽标中的数字
notification.applicationIconBadgeNumber = 1;
// 设置userinfo,用于携带额外的附加信息。
NSDictionary *info = @{@"bys": @"key"};
notification.userInfo = info;
// 调度通知
[app scheduleLocalNotification:notification]; // ①
}
else
{
// 获取所有处于调度中本地通知数组
NSArray *localArray = [app scheduledLocalNotifications];
if (localArray)
{
for (UILocalNotification *noti in localArray)
{
NSDictionary *dict = noti.userInfo;
if (dict)
{
// 如果找到要取消的通知
NSString *inKey = [dict objectForKey:@"bys"];
if ([inKey isEqualToString:@"key"])
{
// 取消调度该通知
[app cancelLocalNotification:noti]; // ②
}
}
}
}
}
}