应用程序添加角标和tabBar添加角标,以及后台运行时显示
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添加角标,以及后台运行时显示的更多相关文章
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
- VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...
- [bug]”System.InvalidProgramException:公共语言运行时检测到无效程序“解决方案
Visual Studio 2017版本15.8.x运行某些程序会报这样的错误:“System.InvalidProgramException:公共语言运行时检测到无效程序” 此问题的临时解决方案: ...
- 关于无法把程序(Adobe Fireworks CS5)添加到打开方式的解决办法
关于无法把程序(Adobe Fireworks CS5)添加到打开方式的解决办法 最近换了新版的Adobe Fireworks CS5,发现打开图片文件时在右键“打开方式”里仍然是以前的Firewor ...
- 设置tabbar的角标与第三方库Masonry的基本使用
// 设置tabbar的角标 [[[[[self tabBarController] viewControllers] objectAtIndex: 0] tabBarItem] setBadgeVa ...
- Ext TabPanel tabbar添加按钮
tabPanel tabbar添加按钮 this.tabPanel = Ext.create('Ext.tab.Panel', { tabBar:{ items:[{ //组件靠右 xtype: 't ...
- 添加底部导航栏tabbar
效果图: 如果要添加底部导航栏,最少2个,最多5个. app.json { "pages": [ "pages/index/index", "page ...
- Linux-NGINX 能否添加P3P头,如何添加。 - 德问:编程社交问答
Linux-NGINX 能否添加P3P头,如何添加. - 德问:编程社交问答 您的投票让 杜鑫 声誉值增加5分. 支持投票,不仅能让提问用户获得声誉值,让好的问题有更多的曝光,更能帮助社区筛选出好 ...
- wap2app(十)--wap2app 添加原生底部导航,添加原生标题栏,填坑
一.添加原生标题栏 添加原生标题栏可以参照 <wap2app(六)-- wap2app的原生标题头无法隐藏>,具体如下: 1.打开 sitemap.json文件 --> page配置 ...
随机推荐
- IT部门的“2/8”现状
专家的研究和大量企业实践表明,在IT项目的生命周期中,大约80%的时间与IT项目运 营维护有关,而该阶段的投资仅占整个IT投资的20%,形成了典型的“技术高消费”.“轻服务.重技术”现象.Gartne ...
- Application runtime path "/opt/lampp/htdocs/yii/test/protected/runtime" is not valid. 错误
原因:把windows版的Yii框架写的程序中的拷到Linux去,assets和runtime目录对Group和其他的权限不够.解决方案:点击这2个文件的属性,属性框全选好了,权限777了. cd p ...
- linux 中搜索命令的对比
1.find find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢. find的使用格式如下: #find [指定目录] [指定条件] [指定动作] 指定目录:是指所要搜索的目录和 ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 分组聚合
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 分组聚合 按组合并返回结果,比如菜单服务,接口一样,但有多种实现,用group区分 ...
- 采用get方式提交数据到服务器实例
GetDemo项目目录 一.编写StreamTools.java /** * */ package com.hyzhou.getdemo.utiils; import java.io.ByteArra ...
- Nginx SSL配置
一.SSL 原理 ① 客户端( 浏览器 )发送一个 https 请求给服务器② 服务器要有一套证书,其实就是公钥和私钥,这套证书可以自己生成,也可以向组织申请,服务器会把公钥传输给客户端③ 客户端收到 ...
- 深度缓存ZBuffer线性化
double linearizeDepth(double nearz,double farz,double depth) { depth = 2.0 * depth - 1.0; return (2. ...
- goto的用法
using UnityEngine; using System.Collections; public class goto1 : MonoBehaviour { public bool can = ...
- mybatis 之resultType="HashMap" parameterType="list"
<!-- 查询商品仓库信息 --> <select id="loadGoodsStock" resultType="HashMap" para ...
- 在recycler中写的布局不起作用
把 LinearLayout 改成 RelativeLayout ok了 创建的两种方式 1.LayoutInflater.from(parent.getContext()).inflate(R. ...