在開發應用時,我們接收消息,往往會看到 App 有通知時就會在應用圖標上顯示未讀消息+1.如何實現呢?其實非常簡單,就幾行代碼
這個是設置應用圖標上顯示未讀消息+1
// 設置提醒數字(App的未讀數) NSString *status = [NSString stringWithFormat:@"%d", count]; if ([status isEqualToString:@"0"]) { // 如果是0,得清空數字 self.tabBarItem.badgeValue = nil;<br> //應用圖標顯示 [UIApplication sharedApplication].applicationIconBadgeNumber = 0; } else { // 非0情況 self.tabBarItem.badgeValue = status; [UIApplication sharedApplication].applicationIconBadgeNumber = status.intValue; }
但是這個是實時改變的,那么我們就需要一個定時器來給他循環引用
- (void)viewDidLoad { [super viewDidLoad]; //多長時間來走一次下面的方法 CGFloat dur = 10; // 獲得未讀數 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: dur target:self selector:@selector(調用的方法) userInfo:nil repeats:YES]; // 主線程也會抽時間處理一下timer(不管主線程是否正在其他事件) [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; }
這樣就可以,但是還有問題,要是我們的 App 后台以后,他是不是就停止了,所以,我們還要再 APPDelegate中設置一下后台代理
- (void)applicationDidEnterBackground:(UIApplication *)application { // 向操作系統申請后台運行的資格,能維持多久,是不確定的 UIBackgroundTaskIdentifier task = [application beginBackgroundTaskWithExpirationHandler:^{ // 當申請的后台運行時間已經結束(過期),就會調用這個block // 趕緊結束任務 [application endBackgroundTask:task]; }]; }
這樣就可以,不是的這樣還是不夠完善,我們應該還要在 info.plist 中添加一句話才行
進入Info.plst中設置后台模式:添加 "Required background modes" 選擇 -> App plays audio or streams audio/video using AirPlay
我們這只是來把我們的 APP 偽裝成音樂或視頻播放器,但是蘋果很吊的,你就算是這樣,他照樣會檢測你是不是在播放音頻,如果不是,內存爆了也是會殺死的,所以呢,我們有一個方法:
找一個 0kb 的 MP3 格式的文件(沒聲音的)
在- (void)applicationDidEnterBackground:(UIApplication *)application 代理中循環播放就 OK了!
補充知識點:
以前的后台模式只有3種
保持網絡連接
多媒體應用
VOIP:網絡電話
app的狀態
1.死亡狀態:沒有打開app
2.前台運行狀態
3.后台暫停狀態:停止一切動畫、定時器、多媒體、聯網操作,很難再作其他操作
4.后台運行狀態