一.微博未读数的小红点的实现
设置小红点数字的方法: self.tabBarItem.badgeValue = @"5";
示例代码:
HomeViewController.m文件
//获得未读数 采用定时器的方法,每个一段时间向服务器发送请求时使用
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(setupUnreadCount) userInfo:nil repeats:YES];
//主线程也会抽出时间处理一下timer (不管主线程是否正在做其他事情)
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
实现方法,里面有小红点的设置:
#pragma mark ---获取微博未读数
-(void)setupUnreadCount
{
//1.请求管理者 创建AFHTTPRequestOperationManager对象
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//2.拼接请求参数
AccountModel *account = [AccountTool account];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"access_token"] = account.access_token;
params[@"uid"] = account.uid;
//3.发送请求
[mgr GET:@"https://rm.api.weibo.com/2/remind/unread_count.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
//打印参数
// NSLog(@"%@",responseObject);
//第一种方法
// //设置微博的未读数
// int status = [responseObject[@"status"] intValue];
// //设置数字提醒
// self.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d",status];
//第二种方法(进行一个简单的判断)
// @20 --> @"20"
// NSNumber --> NSString
// 设置提醒数字(微博的未读数)
NSString *status = [responseObject[@"status"] description];
if ([status isEqualToString:@"0"]) {
self.tabBarItem.badgeValue = nil;
//设置Application右上角的小红数字图标
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
} else { // 非0情况
//小红点的设置(UITabBar上面的小红点)
self.tabBarItem.badgeValue = status;
//设置应用程序图标右上角的小红点数字
[UIApplication sharedApplication].applicationIconBadgeNumber = status.intValue;
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"请求失败--%@",error);
}];
}
二.微博未读数小红点数字在后台的继续运行
1.注意:下面是让小红点在程序退出之后继续存在并计数的方法(及在后台继续运行) 这里注意一点在Info.plst里面要设置后台模式,设置成允许音频播放的模式才能够保持程序你继续运行.
AppDelegate.m文件
//当app进入后台时调用 写在程序进入后台的方法里面
- (void)applicationDidEnterBackground:(UIApplication *)application {
//通知NSNotiifcation不可见
//本地通知
//远程推送通知
/*
app的状态
1.死亡状态:没有打开app
2. 前台运行状态
3.后台暂停状态 : 停止一切动画,定时器,多媒体,联网媒体 很难进行其他操作
4.后台运行状态
*/
//向操作系统申请后台运行资格 能维持多久不确定
UIBackgroundTaskIdentifier task = [application beginBackgroundTaskWithExpirationHandler:^{
//赶紧结束任务
[application endBackgroundTask:task];
}];
// 在Info.plst中设置后台模式:Required background modes == App plays audio or streams audio/video using AirPlay
// 搞一个0kb的MP3文件,没有声音
// 循环播放
// 以前的后台模式只有3种
// 保持网络连接
// 多媒体应用
// VOIP:网络电话
}
Info.plst里面要设置后台模式
2.在ios8之后,后台运行在一定程度要得到用户许可才可以,因此如果不能正常请求的话还向用户法许可获得使用户的同意(不是必须使用,有需要在使用)
AppDelegate.m文件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/** 应用右上角图标数字小红点的开启,要向用户发送请求通知获得用户许可 */
float sysVersion=[[UIDevice currentDevice]systemVersion].floatValue;
if (sysVersion>=8.0) {
UIUserNotificationType type=UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;
UIUserNotificationSettings *setting=[UIUserNotificationSettings settingsForTypes:type categories:nil];
[[UIApplication sharedApplication]registerUserNotificationSettings:setting];
}
return YES;
}