如何在應用圖標上顯示未讀消息


在開發應用時,我們接收消息,往往會看到 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.后台運行狀態


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM