1、设置角标的代码:

     // 从后台取出来的数据可能是int型的不能直接给badgeValue(string类型的),需要通过description转化

    NSString *count = [responseObject[@"count"] description];

if ([count isEqualToString:@"0"]) {

self.tabBarItem.badgeValue = nil; //设置tabBar的角标

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;// 设置应用程序的角标

}else

{

self.tabBarItem.badgeValue = count;

[UIApplication sharedApplication].applicationIconBadgeNumber = status.intValue;

}

2、在给应用程序发送角标设置的时候,可能会报以下错误:

  “Attempting to badge the application icon but haven't received permission from”

  这是因为一切都是iOS8捣的鬼。您如果把模拟器换成iOS7.1或者更早的,就不会有这个问题。而现在在iOS8中要实现badge、alert和sound等都需要用户同意才能,因为这些都算做Notification“通知”,为了防止有些应用动不动给用户发送“通知”骚扰用户,所以在iOS8时,要“通知”必须要用户同意才行。

  下面代码的这个“通知设置”,主要是定义“通知类型”。同时我哦们把所有的通知类型都囊括进来,这样,我们就不需要以后一个一个的去设置alert和sound了。

  这段代码是在AppDelegate.m的 didFinishLaunchingWithOptions中实现:

  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];

}

3、当然说到角标,肯定会有一个关于后台运行的问题,以前我们程序的后台模式只有3种才允许后台长时间,例如保持网络连接、多媒体应用、 VOIP:网络电话(现在很多了,比如蓝牙之类的)

  (1 那现在是什么情况呢?比如说我们要获取角标的数据,通过定时器(代码如下),如果是进入后台运行状态可能会导致定时器暂停

    //定时获得未读数据  

      NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(getUnreadCount) userInfo:nil repeats:YES];

  // !!主线程也会抽时间处理一下timer(不管主线程是否正在执行其他事件操作)——不加的话执行其他操作可能定时器会被忽略不执行

   [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

  (2 解决方法:

   首先,我们还应该知道app的状态:  1.死亡状态:没有打开app  2.前台运行状态   3.后台暂停状态:停止一切动画、定时器、多媒体、联网操作,很难再作其他操作  4.后台运行状态。

  那么进入后台运行状态我们可以在在AppDelegate.m中调用applicationDidEnterBackground:

  /*

  * 程序进入后台的时候调用

  */

  - (void)applicationDidEnterBackground:(UIApplication *)application {

  // 向操作系统申请后台运行的资格,能维持多久,是不确定的  

  UIBackgroundTaskIdentifier task = [application beginBackgroundTaskWithExpirationHandler:^{

    // 当申请的后台运行时间已经结束(过期),就会调用这个block

    // 过期则需要结束任务

    [application endBackgroundTask:task];

  }];

  当然这种方法是暂时性的,过期的话我们就没办法了吗?不!同时我们还可以假装是音频软件:在Info.plst中设置后台模式:Required background modes == App plays audio or streams audio/video using AirPlay,然后搞一个0kb的MP3文件,没有声音 循环播放!

应用程序添加角标和tabBar添加角标,以及后台运行时显示的更多相关文章

  1. C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...

  2. VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...

  3. [bug]”System.InvalidProgramException:公共语言运行时检测到无效程序“解决方案

    Visual Studio 2017版本15.8.x运行某些程序会报这样的错误:“System.InvalidProgramException:公共语言运行时检测到无效程序” 此问题的临时解决方案: ...

  4. 关于无法把程序(Adobe Fireworks CS5)添加到打开方式的解决办法

    关于无法把程序(Adobe Fireworks CS5)添加到打开方式的解决办法 最近换了新版的Adobe Fireworks CS5,发现打开图片文件时在右键“打开方式”里仍然是以前的Firewor ...

  5. 设置tabbar的角标与第三方库Masonry的基本使用

    // 设置tabbar的角标 [[[[[self tabBarController] viewControllers] objectAtIndex: 0] tabBarItem] setBadgeVa ...

  6. Ext TabPanel tabbar添加按钮

    tabPanel tabbar添加按钮 this.tabPanel = Ext.create('Ext.tab.Panel', { tabBar:{ items:[{ //组件靠右 xtype: 't ...

  7. 添加底部导航栏tabbar

    效果图: 如果要添加底部导航栏,最少2个,最多5个. app.json { "pages": [ "pages/index/index", "page ...

  8. Linux-NGINX 能否添加P3P头,如何添加。 - 德问:编程社交问答

    Linux-NGINX 能否添加P3P头,如何添加. - 德问:编程社交问答   您的投票让 杜鑫 声誉值增加5分. 支持投票,不仅能让提问用户获得声誉值,让好的问题有更多的曝光,更能帮助社区筛选出好 ...

  9. wap2app(十)--wap2app 添加原生底部导航,添加原生标题栏,填坑

    一.添加原生标题栏 添加原生标题栏可以参照 <wap2app(六)-- wap2app的原生标题头无法隐藏>,具体如下: 1.打开 sitemap.json文件 --> page配置 ...

随机推荐

  1. IT部门的“2/8”现状

    专家的研究和大量企业实践表明,在IT项目的生命周期中,大约80%的时间与IT项目运 营维护有关,而该阶段的投资仅占整个IT投资的20%,形成了典型的“技术高消费”.“轻服务.重技术”现象.Gartne ...

  2. Application runtime path "/opt/lampp/htdocs/yii/test/protected/runtime" is not valid. 错误

    原因:把windows版的Yii框架写的程序中的拷到Linux去,assets和runtime目录对Group和其他的权限不够.解决方案:点击这2个文件的属性,属性框全选好了,权限777了. cd p ...

  3. linux 中搜索命令的对比

    1.find find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢. find的使用格式如下: #find [指定目录] [指定条件] [指定动作] 指定目录:是指所要搜索的目录和 ...

  4. Dubbo -- 系统学习 笔记 -- 示例 -- 分组聚合

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 分组聚合 按组合并返回结果,比如菜单服务,接口一样,但有多种实现,用group区分 ...

  5. 采用get方式提交数据到服务器实例

    GetDemo项目目录 一.编写StreamTools.java /** * */ package com.hyzhou.getdemo.utiils; import java.io.ByteArra ...

  6. Nginx SSL配置

    一.SSL 原理 ① 客户端( 浏览器 )发送一个 https 请求给服务器② 服务器要有一套证书,其实就是公钥和私钥,这套证书可以自己生成,也可以向组织申请,服务器会把公钥传输给客户端③ 客户端收到 ...

  7. 深度缓存ZBuffer线性化

    double linearizeDepth(double nearz,double farz,double depth) { depth = 2.0 * depth - 1.0; return (2. ...

  8. goto的用法

    using UnityEngine; using System.Collections; public class goto1 : MonoBehaviour { public bool can = ...

  9. mybatis 之resultType="HashMap" parameterType="list"

    <!-- 查询商品仓库信息 --> <select id="loadGoodsStock" resultType="HashMap" para ...

  10. 在recycler中写的布局不起作用

    把 LinearLayout 改成 RelativeLayout   ok了 创建的两种方式 1.LayoutInflater.from(parent.getContext()).inflate(R. ...