iOS底部按钮和应用图标显示未读消息

我们要实现的效果如下:

我们使用系统自带的,实际上,代码量很少,在我们要显示的按钮上,打上下面一句代码即可:

self.tabBarItem.badgeValue = @"1";

同时设置图标和按钮的代码:

/**
 *  获得未读数
 */
- (void)setupUnreadCount
{
    //获取未读数具体方法
    //最终返回一个数字,如:
    int count=10;

    // 设置提醒数字(微博的未读数)
    NSString *status = [NSString stringWithFormat:@"%d", count];
    if ([status isEqualToString:@"0"]) { // 如果是0,得清空数字
        self.tabBarItem.badgeValue = nil;     //应用图标显示
        [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    } else { // 非0情况
        self.tabBarItem.badgeValue = status;
        [UIApplication sharedApplication].applicationIconBadgeNumber = status.intValue;
    }
}

当然,设置的显示的这个数字,是应该会定时的变的。如何使这个方法定时的调用呢?

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 获得未读数
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(setupUnreadCount) userInfo:nil repeats:YES];
    // 主线程也会抽时间处理一下timer(不管主线程是否正在其他事件)
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

做完上面的操作后,我们是可以看到效果了。但还存在一个问题就是,我们的应用进入后台后,定时器不再工作,变成了一个暂时状态。那为什么一个音乐的应用可以一直在后台运行呢?实际上,在AppDelegate里面已经有后台运行的方法,我们在这个方法里做一些操作即可。

/**
 *  当app进入后台时调用
 */
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /**
     *  app的状态
     *  1.死亡状态:没有打开app
     *  2.前台运行状态
     *  3.后台暂停状态:停止一切动画、定时器、多媒体、联网操作,很难再作其他操作
     *  4.后台运行状态
     */
    // 向操作系统申请后台运行的资格,能维持多久,是不确定的
    UIBackgroundTaskIdentifier task = [application beginBackgroundTaskWithExpirationHandler:^{
        // 当申请的后台运行时间已经结束(过期),就会调用这个block

        // 赶紧结束任务
        [application endBackgroundTask:task];
    }];

    // 在Info.plst中设置后台模式:Required background modes == App plays audio or streams audio/video using AirPlay
    // 搞一个0kb的MP3文件,没有声音
    // 循环播放

    // 以前的后台模式只有3种
    // 保持网络连接
    // 多媒体应用
    // VOIP:网络电话
}

在上面的代码里,我们看到,需要在Info.plst中设置后台模式:Required background modes == App plays audio or streams audio/video using AirPlay,如图:

最后搞一个0kb的MP3,没有声音的,循环播放即可。

时间: 2024-10-22 12:29:01

iOS底部按钮和应用图标显示未读消息的相关文章

【Python学习笔记】-APP图标显示未读消息数目

以小米手机系统为例,当安装的某个APP有未读消息时,就会在该APP图标的右上角显示未读消息的数目.本文主要解说怎样用Python语言实现图标显示未读消息的数目.首先,还是要用到Python中PIL库,关于Linux下怎样安装PIL库,请大家參考这篇博客:http://blog.csdn.net/kevin_zhai/article/details/47720721,里面有具体的安装过程.实现的原理非常easy,直接用Image读取原始图标.然后将未读消息的数目插入到图标的右上角就可以. 脚本代码

Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示

参考: http://dev.xiaomi.com/doc/p=3904/index.html http://my.oschina.net/ososchina/blog/352286?p=1#comments https://github.com/leolin310148/ShortcutBadger http://www.voidcn.com/blog/kongbaidepao/article/p-62251.html http://www.eoeandroid.com/thread-5572

iOS开发项目篇—39获取用户未读的微博信息(信息提醒)

iOS开发项目篇—39获取用户未读的微博信息(信息提醒) 一.简单说明 1.实现效果       2.实现 (1)新建一个类,封装请求 查看新浪官方要求的请求参数 该类中的代码设计 YYUnreadCountParam.h文件 1 // YYUnreadCountParam.h 2 //封装请求参数的类 3 4 #import "YYBaseParam.h" 5 6 @interface YYUnreadCountParam : YYBaseParam 7 /**uid true in

[iOS微博项目 - 3.6] - 获取未读消息

github: https://github.com/hellovoidworld/HVWWeibo   A.获取登陆用户未读消息 1.需求 获取所有未读消息,包括新微博.私信.@.转发.关注等 把未读消息数显示在相应的tabItem上 把总的未读消息数显示在app图标上 当app进入后台,仍然需要刷新未读消息数量数据 读取了未读消息之后清空计数 监听tabBarItem的点击,刷新数据(例如重复点击"首页"要刷新微博) 2.思路 使用微博提醒API获取未读消息 使用定时器定时获取 在

桌面图标未读消息(小米,sony,三星手机)

新消息来了,在桌面的Laucher图标上显示新消息数 /** * 应用桌面图标未读消息显示工具类 * 只支持 小米,三星和索尼 */ public class BadgeUtil { final static String LAUNCHER_ACTIVITY_NAME = "com.wenki.example.activity.SplashActivity"; public static void setBadgeCount(Context context, int count) {

Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

摘要 Android系统 小米,三星,索尼手机发送桌面快键提醒数字图标,在Android系统中,众所周知不支持BadgeNumber,虽然第三方控件BadgeView可以实现应用内的数字提醒,但对于系统的图标,特别是app的logo图标很难实现数字标志,即使是绘图的方式不断修改,但这种方式天生弊端,实用性很差. BadgeNumber ShortCutNumber miui samsung sony sendBadgeNumber logo/icon数字提醒 Android系统 小米,三星,索尼

iOS 未读消息角标 仿QQ拖拽 简单灵活 支持xib(源码)

一.效果 二.简单用法 超级简单,2行代码集成:xib可0代码集成,只需拖一个view关联LFBadge类即可 支持pod导入pod 'LFKit/LFBadge' //一般view上加角标 _badge1 = [[LFBadge alloc] init]; [_badge1 addToTabBarItem:_view1]; //BarButtonItem上加角标 _badge2 = [[LFBadge alloc] init]; [_badge2 addToBarButtonItem:self

Android自定义控件:类QQ未读消息拖拽效果

QQ的未读消息,算是一个比较好玩的效果,趁着最近时间比较多,参考了网上的一些资料之后,本次实现一个仿照QQ未读消息的拖拽小红点,最终完成效果如下: 首先我们从最基本的原理开始分析,看一张图: 这个图该怎么绘制呢?实际上我们这里是先绘制两个圆,然后将两个圆的切点通过贝塞尔曲线连接起来就达到这个效果了.至于贝塞尔曲线的概念,这里就不多做解释了,百度一下就知道了. 切点怎么算呢,这里我们稍微复习一些初中的数学知识.看了这个图之后,求出四个切点应该是轻而易举了. 现在思路已经很清晰了,按照我们的思路,开

使用clipChildren实现仿微信的未读消息列表显式布局

做IM项目是遇到了一个问题就是让那个个未读消息显示在他的父类外面,类似微信的未读消息数显式布局,弄了好久都不知道怎么搞,用其它方法因为要达到适配的原因所以放弃了最后老大告诉我加一个: 代码如下: <span style="color:#4b4b4b;"><LinearLayout android:id="@+id/msg_item_layout" android:layout_width="fill_parent" androi