您的位置:首页 > 编程语言 > Qt开发

Qt for iOS:推送一个本地通知到通知中心

2015-01-06 21:18 477 查看
本文讲述如何进行一个本地通知的推送

这个推送相对简单,如果各位有兴趣可以去研究一下网络通知的推送,那个更加的强大和灵活

那么,本地的通知,可以做哪些呢?

比如说你***了一个游戏,你可以埋一个一天期限的通知,然后用户在第二天就可以看到

“你已经一天没玩XX了,赶快来玩~”

其实,虽然只是本地的,但是这个通知已经可以满足很多需求了

关于本地通知的几个知识点:

1.在添加了通知后,通知就加入到了系统的推送列表(如果这是一个有效的通知,并且用户允许你的app进行推送),在你清除之前,他会一直在那里直到触发

2.在添加了通知后,无论程序当前状态是关闭或者打开亦或是在后台,通知都可以正常推送

3.当前app就是你的app时,推送不会直接显示出来,只会默默的到通知中心

4.这个通知,只可以在程序运行期生成

不多说,直接上源码

注意,本项目需要C++与Objective-C混编,也就是说,这个做法,仅用于iOS

JasonQt_iOS.h文件

#ifndef __JasonQt_iOS_h__
#define __JasonQt_iOS_h__

// Qt lib import
#include <QString>
#include <QDateTime>

namespace JasonQt_iOS
{

void pushNotifiction(const QString &message, const QDateTime &dateTime);

void cancelAllNotifictions(void);

}

#endif//__JasonQt_iOS_h__


JasonQt_iOS.mm文件(注意是mm后缀,可以理解为cpp。只有使用mm后缀的时候,才会开启C++和Objective-C混编模式)

#include "JasonQt_iOS.h"

// iOS lib import
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

void JasonQt_iOS::pushNotifiction(const QString &message, const QDateTime &dateTime)
{
    UIUserNotificationType types = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge;

    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:types categories:NULL];

    [[UIApplication sharedApplication] registerUserNotificationSettings:setting];

    NSDateComponents *dateComp = [[NSDateComponents alloc] init];
    dateComp.year = dateTime.date().year();
    dateComp.month = dateTime.date().month();
    dateComp.day = dateTime.date().day();
    dateComp.hour = dateTime.time().hour();
    dateComp.minute = dateTime.time().minute();
    dateComp.second = dateTime.time().second();
    dateComp.timeZone = [NSTimeZone systemTimeZone];

    NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSGregorianCalendar];

    NSDate *date = [calendar dateFromComponents:dateComp];

    UILocalNotification *notifiction = [[UILocalNotification alloc]init];
    notifiction.alertBody = [NSString stringWithFormat:@"%s" , message.toStdString().c_str()];
    notifiction.fireDate = date;

    [[UIApplication sharedApplication]scheduleLocalNotification:notifiction];
}

void JasonQt_iOS::cancelAllNotifictions(void)
{
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}


使用

JasonQt_iOS::pushNotifiction("Message: Be overdue", QDateTime::currentDateTime().addSecs(-60)); // 过期的信息不会被显示

JasonQt_iOS::pushNotifiction("Message: Need to cancel", QDateTime::currentDateTime().addSecs(15)); // 被取消的信息不会被显示
JasonQt_iOS::cancelAllNotifictions();

for(int count = 0; count < 3; count++)
{
    JasonQt_iOS::pushNotifiction(QString("Message: %1").arg(count + 1), QDateTime::currentDateTime().addSecs(16 + count * 2));
}


注:使用前,请在pro文件中添加

LIBS += -framework Foundation -framework UIKit

OBJECTIVE_SOURCES += JasonQt_iOS.mm

HEADERS += JasonQt_iOS.h


效果1,在通知中心查看:



效果2,在其他地方查看:



示例下载地址

http://download.csdn.net/detail/wsj18808050/8714083
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: