本地通知

本地通知,local notification,用于基于時間行為的通知,比如有關日歷或者todo列表的小應用。另外,應用如果在后臺執行,iOS允許它在受限的時間內運行,它也會發現本地通知有用。比如,一個應用,在后臺運行,向應用的服務器端獲取消息,當消息到達時,通過本地通知機制通知用戶。

本地通知是UILocalNotification的實例,主要有三類屬性:

  • scheduled time,時間周期,用來指定iOS系統發送通知的日期和時間;
  • notification type,通知類型,包括警告信息、動作按鈕的標題、應用圖標上的badge(數字標記)和播放的聲音;
  • 自定義數據,本地通知可以包含一個dictionary類型的本地數據。

對本地通知的數量限制,iOS最多允許最近本地通知數量是64個,超過限制的本地通知將被iOS忽略。

如果就寫個簡單的定時提醒,是很簡單的,比如這樣:

示例寫的很簡單,啟動應用后,就發出一個定時通知,10秒后啟動。這時按Home鍵退出,一會兒就會提示上圖的提示信息。如果應用不退出則無效。

代碼如下:

UILocalNotification *notification=[[UILocalNotification alloc] init];?
if (notification!=nil) {?
??? NSLog(@">> support local notification");?
??? NSDate *now=[NSDate new];?
??? notification.fireDate=[now addTimeInterval:10];?
??? notification.timeZone=[NSTimeZone defaultTimeZone];?
??? notification.alertBody=@"該去吃晚飯了!";?
??? [[UIApplication sharedApplication]?? scheduleLocalNotification:notification];

?

更詳細的代碼見官方文檔:《Scheduling, Registering, and Handling Notifications》,可以設置比如聲音,比如用戶定義數據等。

設置更多本地通知的信息:

?

  • 設置icon上數字。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {????
??? // Override point for customization after application launch.?
??? /?
? application.applicationIconBadgeNumber = 0;?
??? // Add the view controller’s view to the window and display.?
??? [self.window addSubview:viewController.view];?
??? [self.window makeKeyAndVisible];

??? return YES;?
}

  • 添加通知時間,通知類型,取消通知

#pragma mark –?
#pragma mark onChageValue?
-(IBAction)onChangeValue:(id)sender?
{?
??? UISwitch *switch1=(UISwitch *)sender;?
??? if (switch1.on) {?
??????? UILocalNotification *notification=[[UILocalNotification alloc] init];?
??????? NSDate *now1=[NSDate date];??
??????? notification.timeZone=[NSTimeZone defaultTimeZone];?
??????? notification.repeatInterval=NSDayCalendarUnit;?
??????? notification.applicationIconBadgeNumber = 1;?
??????? notification.alertAction = NSLocalizedString(@"顯示", nil);?
??????? switch (switch1.tag) {?
??????????? case 0:?
??????????? {?
??????????????? notification.fireDate=[now1 dateByAddingTimeInterval:10];?
??????????????? notification.alertBody=self.myLable1.text;?
??????????? }?
??????????????? break;?
??????????? case 1:?
??????????? {?
??????????????? notification.fireDate=[now1 dateByAddingTimeInterval:20];?
??????????????? notification.alertBody=self.myLable2.text;?
??????????? }?
??????????????? break;?
??????????? case 2:?
??????????? {?
??????????????? notification.fireDate=[now1 dateByAddingTimeInterval:30];?
??????????????? notification.alertBody=self.myLable3.text;?
??????????? }?
??????????????? break;?
??????????? default:?
??????????????? break;?
??????? }?
??????? [notification setSoundName:UILocalNotificationDefaultSoundName];?
??????? NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:?
????????????????????????????? [NSString stringWithFormat:@"%d",switch1.tag], @"key1", nil];?
??????? [notification setUserInfo:dict];?
??????? [[UIApplication sharedApplication]?? scheduleLocalNotification:notification];?
??? }else {?
??????? NSArray *myArray=[[UIApplication sharedApplication] scheduledLocalNotifications];?
??????? for (int i=0; i<[myArray count]; i++) {?
??????????? UILocalNotification??? *myUILocalNotification=[myArray objectAtIndex:i];?
??????????? if ([[[myUILocalNotification userInfo] objectForKey:@"key1"] intValue]==switch1.tag) {?
??????????????? [[UIApplication sharedApplication] cancelLocalNotification:myUILocalNotification];?
??????????? }?
??????? }?
??? }?
}

?

***************Demo**************

#import <Foundation/Foundation.h>

@interface LocalNotifications : NSObject

// 設置本地通知

+ (void)registerLocalNotification:(NSInteger)alertTime;

// 取消當前通知

+ (void)cancelLocalNotificationWithKey:(NSString *)key;

@end

?

#import "LocalNotifications.h"

// 1.如果需要設置多個通知,key就不能寫成宏定義了,需要動態生成

// 2.以便在用戶關閉某個通知時,可以移除對應的本地通知

#define KAlarmLocalNotificationKey @"KAlarmLocalNotificationKey"

?

@implementation LocalNotifications

?

// 設置本地通知

+ (void)registerLocalNotification:(NSInteger)alertTime

{

? ? UILocalNotification *notification = [[UILocalNotification alloc] init];

? ? // 設置觸發通知的時間

? ? NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];

?? ?

? ? notification.fireDate = fireDate;

? ? // 時區

? ? notification.timeZone = [NSTimeZone defaultTimeZone];

? ? // 設置重復的間隔

? ? notification.repeatInterval = kCFCalendarUnitSecond;

? ? // 通知內容

? ? notification.alertBody =? @"發現新版本,請前往更新";

? ? notification.applicationIconBadgeNumber = 1;

? ? // 通知被觸發時播放的聲音

? ? notification.soundName = UILocalNotificationDefaultSoundName;

? ? // 通知參數

? ? NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"是否前往更新" forKey:@"key"];

? ? notification.userInfo = userDict;

?? ?

? ? // ios8后,需要添加這個注冊,才能得到授權

? ? if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {

? ? ? ? UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;

? ? ? ? UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];

? ? ? ? [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

? ? ? ? // 通知重復提示的單位,可以是天、周、月

? ? ? ? notification.repeatInterval = NSCalendarUnitDay;

? ? } else {

? ? ? ? // 通知重復提示的單位,可以是天、周、月

? ? ? ? notification.repeatInterval = NSDayCalendarUnit;

? ? }

?? ?

? ? // 執行通知注冊

? ? [[UIApplication sharedApplication] scheduleLocalNotification:notification];

}

// 取消某個本地推送通知

+ (void)cancelLocalNotificationWithKey:(NSString *)key

{

? ? // 獲取所有本地通知數組

? ? NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;

?? ?

? ? for (UILocalNotification *notification in localNotifications) {

? ? ? ? NSDictionary *userInfo = notification.userInfo;

? ? ? ? if (userInfo) {

? ? ? ? ? ? // 根據設置通知參數時指定的key來獲取通知參數

? ? ? ? ? ? NSString *info = userInfo[key];

?? ? ? ? ? ?

? ? ? ? ? ? // 如果找到需要取消的通知,則取消

? ? ? ? ? ? if (info != nil) {

? ? ? ? ? ? ? ? [[UIApplication sharedApplication] cancelLocalNotification:notification];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

@end

轉載于:https://www.cnblogs.com/xmqios/p/5036395.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257968.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redux 并不慢,只是你使用姿勢不對 —— 一份優化指南

原文地址&#xff1a;Redux 并不慢&#xff0c;只是你使用姿勢不對 —— 一份優化指南原文作者&#xff1a;Julian Krispel譯文出自&#xff1a;掘金翻譯計劃本文永久鏈接&#xff1a;github.com/xitu/gold-m…譯者&#xff1a;reid3290校對者&#xff1a;sunui&#xff0c;xek…

把windows裝到linux下,如何將WSL(Windows Subsystem for Linux 2)安裝到Windows 10?

原標題&#xff1a;如何將WSL(Windows Subsystem for Linux 2)安裝到Windows 10&#xff1f;Windows 10憑借大受歡迎的WSL(Windows Subsystem for Linux)進入Linux領域。由于最近推出了WSL的最新版WSL2&#xff0c;用戶現在可以利用實際的Linux內核從Windows執行Linux任務。現在…

TWRP-recovery中文界面安裝方法[轉]

把下載到的ui.zip放入sdcard1/twrp文件夾。注意&#xff0c;是內置存儲卡中。如沒有上述文件夾&#xff0c;自行建立后通過文件管理器放入&#xff0c;不是卡刷。文件夾應如下所示&#xff1a;sdcard1&#xff08;內置SD&#xff09; &#xff5c; ┕--twrp&#xff08;文件夾…

如何定期備份網站數據

產生這個問題的背景是我在維護兩個個人的網站&#xff0c;因為采用的是虛擬主機&#xff0c;有時候空間續費不及時等&#xff0c;都可能造成數據的丟失&#xff0c;為了保障數據不丟失&#xff0c;因為有必要每15天左右對網站數據進行備份以防止發生不當的事情。 我們希望做的就…

初創團隊可能不適合應屆生小孩

根據最近招聘中接觸到的一些剛畢業小孩的表現&#xff0c;談談這個問題&#xff1a; 1、扛不住&#xff0c;初創團隊一般最好一人撐一快工作&#xff0c;剛畢業經驗比較薄的小孩在這方面一是心理上不敢擔當&#xff0c;二是能力上確實還需要磨煉成長 2、初創團隊的那個環境可能…

vba執行linux命令,從VBA中的shell命令捕獲輸出值?

慕蓋茨4494581根據Andrew Lessard的回答&#xff0c;這是一個運行命令并將輸出作為字符串返回的函數 -Public Function ShellRun(sCmd As String) As StringRun a shell command, returning the output as a stringDim oShell As ObjectSet oShell CreateObject("WScript…

溢出和剪裁,可見性

內容溢出和剪裁 如果一個元素的內容對于元素大小來說過大&#xff0c;就有可能溢出元素本身。對于此情況&#xff0c;有一些解決辦法可選。 溢出 overflow 值 visible(默認):內容在元素框外可見。一般會導致內容超出其自己的元素框&#xff0c;但不會改變框的形狀scroll:溢出部…

C#= 棧模仿堆的操作

//原理&#xff0c;利用兩個棧&#xff0c;互相作用&#xff0c;來模仿堆的效果&#xff0c;先進先出。。 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Threading.Tasks;5 6 namespace TwoStacksQueue7 {8 public class Progra…

linux計劃任務執行日志,linux中centos制定計劃任務執行命令并且輸出日志

1.寫腳本最簡單的 寫如下代碼#!/bin/shABC1.每個命令之間用;隔開說明&#xff1a;各命令的執行給果&#xff0c;不會影響其它命令的執行。換句話說&#xff0c;各個命令都會執行&#xff0c;但不保證每個命令都執行成功。2.每個命令之間用&&隔開說明&#xff1a;若前面…

Java-大集合拆分為指定大小的小集合

因為Oracle數據的in 最大允許1000 ,超過就會報錯&#xff0c; 所以需要將集合拆分為多個集合進行處理. /*** 拆分集合* param <T>* param resList 要拆分的集合* param count 每個集合的元素個數* return 返回拆分后的各個集合*/public static <T> List<L…

AsyncTask與多任務

問題由來&#xff1a; 之前看到一篇博文&#xff0c;說AsyncTask不適合運行多任務&#xff0c; 多個任務不會異步執行&#xff0c; 當時只是印象里記住了一下也不確定&#xff0c; 今天把代碼看了看&#xff0c; 把原因寫出來。 問題的代碼演示&#xff1a; 1 public class Asy…

iptables簡單應用

可以修改/etc/rc.d/boot.local讓規則重啟后也能生效&#xff0c;如&#xff1a;/sbin/iptables -F/sbin/iptables -A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT/sbin/iptables -A INPUT -i eth0 -p tcp -j DROP/sbin/iptables -A INPUT -i eth0 -p udp -j DROPiptables是一個…

linux中內部命令有哪些,linux內部命令有哪些

linux中常見的內部命令有&#xff1a;1.exit命令&#xff0c;退出當前的shell&#xff1b;2.history命令&#xff0c;顯示歷史執行過的命令&#xff1b;3.cd命令&#xff0c;切換當前工作目錄&#xff1b;4.source命令&#xff0c;重新執行剛修改的初始化文件&#xff1b;5.ech…

使用SALT-API進入集成開發的簡單樣例

測試的時候&#xff0c;可以CURL -K&#xff0c;但真正作集成的時候&#xff0c;卻是不可以的。 必須&#xff0c;不可以讓TOKEN滿天飛吧。 現在進入這個階段了。寫個樣例先&#xff1a; import salt import salt.auth import salt.log import saltapiopts salt.client.LocalC…

POJ 2778

題意&#xff1a;很Uva項鏈題目類似。 區別&#xff1a; 1、字符串很多&#xff0c;用map hash超時&#xff0c;用Trie查找。 2、DFS判斷連通&#xff0c;和并查集判連通&#xff0c;被我寫錯的地方時&#xff0c;查森林的時候&#xff0c;還是要Find_Set。 1 #include <ios…

linux掛載VMFS硬盤,ESX4.1掛載NFS共享存儲(VMkernel)

要使用vmotion,iscsi,nfs功能&#xff0c;必須啟用VMkernel端口&#xff0c;ESX 4.1默認不啟用&#xff0c;ESXi 5.x默認啟用。在 vCenter Server“SZVCENTER01”上調用對象“datastoreSystem-44”的“HostDatastoreSystem.CreateNasDatastore” 失敗。掛載NFS存儲的ESX控制臺命…

Perl學習之四:語句(續)

循環控制&#xff1a;1.last 退出標簽的語句塊2.next 3.redo不推薦&#xff0c;循環次數不可控 4.goto不推薦。***************************************標簽&#xff1a; 先定義一個 labellast|next|redo|goto label&#xff1b; last VS next 相當于C語言中的&#xff1a;las…

2017年8個最流行的Web編程趨勢

互聯網一直在不斷的發展&#xff0c;這意味著開發人員必須及時了解當前的所有變化。人們在新聞、社交、購物到銀行等各大方面都與互聯網有著千絲萬縷的聯系。因此&#xff0c;為了滿足全球數百萬網絡用戶的需求&#xff0c;Web開發需求正在上升。Web編程趨勢是在W開發的過程中不…

linux 分卷壓縮到指定目錄,運用在android下Linux分卷壓縮與分卷解壓的命令

protected static Vector execRootCmd(String paramString) {Vector localVector new Vector();try {Process localProcess Runtime.getRuntime().exec("su ");// 經過Root處理的android系統即有su命令OutputStream localOutputStream localProcess.getOutputStre…

gRPC-rs:從 C 到 Rust

介紹 在上篇文章中&#xff0c;我們講到 TiKV 為了支持 [gRPC]&#xff0c;我們造了個輪子 [gRPC-rs]&#xff0c;這篇文章簡要地介紹一下這個庫。首先我們來聊聊什么是 gRPC。gRPC 是 Google 推出的基于 [HTTP2] 的開源 RPC 框架&#xff0c;希望通過它使得各種微服務之間擁有…