iOS_经验(2)_UIApplication 总结

一丶介绍

The UIApplication class provides a centralized point of control and 
coordination for apps running in iOS. Every app has exactly one instance 
of UIApplication (or, very rarely, a subclass of UIApplication). When an 
app is launched, the system calls the UIApplicationMain function; among 
its other tasks, this function creates a singletonUIApplication object. 
Thereafter you access the object by calling the sharedApplication class 
method.

UIApplication代表一个应用,是整个应用程序的象征,通过[UIApplication sharedApplication] 获取.

  • 是一个单例.
  • ios程序启动后创建的第一人对象就是UIApplication对象.

UIApplication用来干什么?

1.用来设置全局性的东西
2.打电话、发短信、发邮件、打开网站
3. ......

二丶用法

1.跳转iPhone设置界面

- (BOOL)openURL:(NSURL*)url NS_EXTENSION_UNAVAILABLE_IOS("");
- (BOOL)canOpenURL:(NSURL *)url NS_AVAILABLE_IOS(3_0);

//使用:
if ([[UIApplication sharedApplication] canOpenURL:url])
{   
   [[UIApplication sharedApplication] openURL:url];
}


地址介绍:

1.跳转到自己应用设置界面:UIApplicationOpenSettingsURLString 
NS_AVAILABLE_IOS(8_0);

if ([[UIDevice currentDevice].systemVersion floatValue] < 8.0f)
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
}else{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}

2.设置_其他:
@"prefs:root=General&path=About",//关于本机
@"prefs:root=General&path=ACCESSIBILITY",//辅助功能
@"prefs:root=AIRPLANE_MODE",//飞行模式
@"prefs:root=General&path=AUTOLOCK",//自动锁定
@"prefs:root=General&path=DATE_AND_TIME",//日期与时间
@"prefs:root=FACETIME",//faceTime
@"prefs:root=General&path=Keyboard",//键盘
@"prefs:root=CASTLE",//iCloud
@"prefs:root=CASTLE&path=STORAGE_AND_BACKUP",//存储空间
@"prefs:root=General&path=INTERNATIONAL",//语音与地区
@"prefs:root=LOCATION_SERVICES",//定位服务
@"prefs:root=ACCOUNT_SETTINGS",//邮件-通讯录-日历
@"prefs:root=MUSIC",//音乐
@"prefs:root=MUSIC&path=EQ",//音乐
@"prefs:root=MUSIC&path=VolumeLimit",//音乐
@"prefs:root=NIKE_PLUS_IPOD",//通用
@"prefs:root=NOTES",//备忘录
@"prefs:root=NOTIFICATIONS_ID",//通知
@"prefs:root=Phone",//电话
@"prefs:root=Photos",//照片与相机
@"prefs:root=General&path=ManagedConfigurationList",//描述文件
@"prefs:root=General&path=Reset",//还原
@"prefs:root=Sounds&path=Ringtone",//电话铃声
@"prefs:root=General&path=Assistant",
@"prefs:root=Sounds",//声音
@"prefs:root=General&path=SOFTWARE_UPDATE_LINK",//软件更新
@"prefs:root=STORE",//app store
@"prefs:root=TWITTER",
@"prefs:root=General&path=USAGE",
@"prefs:root=VIDEO",//视频
@"prefs:root=General&path=Network/VPN",
@"prefs:root=Wallpaper",//墙纸
@"prefs:root=WIFI",//wifi
@"prefs:root=INTERNET_TETHERING",//个人热点
@"prefs:root=Bluetooth"//蓝牙

3.Email
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://devprograms@apple.com"]];

4.Safari
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://coder-lee.lofter.com/"]];

5.sms打开短信
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sms://10086"]];

6.直接拨打电话
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"tel://10086"]];

2.keyWindow

1.收起键盘
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];

3.状态栏网络状态旋转齿轮

//显示YES,隐藏NO;
[UIApplication sharedApplication].networkActivityIndicatorVisible =YES;

4.在控制台里打印view的层级

控制台
po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]

指定view:
po [self.view recursiveDescription];

5.防止屏幕睡眠

// default is NO
[[UIApplication sharedApplication].idleTimerDisabled=YES;  

6.改更状态栏 颜色/显隐

设置下info;
info->View controller-based status bar appearance = no

UIApplication *app = [UIApplication sharedApplication];

白色[app setStatusBarStyle:UIStatusBarStyleLightContent];
黑色[app setStatusBarStyle: UIStatusBarStyleDefault];
显隐 [app setStatusBarHidden:NO];

7.代理回调

各个程序运行状态时代理的回调:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //告诉代理进程启动但还没进入状态保存
    return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //告诉代理启动基本完成程序准备开始运行
    return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
    //当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{ //当应用程序入活动状态执行,这个刚好跟上面那个方法相反
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    //当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    //当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
}
- (void)applicationWillTerminate:(UIApplication *)application
{
    //当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
}
-  (void)applicationDidFinishLaunching:(UIApplication *)application
{
    //当程序载入后执行
}

8.判断网络类型(私有api),建议用Reachabillity

//获取状态区
UIApplication *app = [UIApplication sharedApplication];
//怎么获取状态栏所有的子视图  KVC key找Value 系统提供好的
NSArray *array = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
for (id obj in array) {
    
    if ([obj isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
        int type = [[obj valueForKey:@"dataNetworkType"] intValue];
        NSLog(@"%d",type);
        switch (type) {
            case 0:
                NSLog(@"无网络");
                break;
            case 1:
                NSLog(@"2G网络");
                break;
            case 2:
                NSLog(@"3G网络");
                break;
            case 3:
                NSLog(@"4G网络");
                break;
            case 4:
                NSLog(@"无网络");
                break;
            case 5:
                NSLog(@"Wifi");
                break;
                
            default:
                break;
        }
    }
}

9.跳转AppStore应用

假如你应用id=1234567890
itms-apps://itunes.apple.com/cn/app/hua-ying-dai/id1234567890?l=en&mt=
跳转应用评分
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=1234567890&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8

三丶扩展

1.获取项目沙盒大小

@interface UIApplication (ApplicationSize)
- (NSString *)applicationSize;
@end
@implementation UIApplication (ApplicationSize)

- (NSString *)applicationSize {
    unsigned long long docSize   =  [self sizeOfFolder:[self documentPath]];
    unsigned long long libSize   =  [self sizeOfFolder:[self libraryPath]];
    unsigned long long cacheSize =  [self sizeOfFolder:[self cachePath]];
    
    unsigned long long total = docSize + libSize + cacheSize;
    
    NSString *folderSizeStr = [NSByteCountFormatter stringFromByteCount:total countStyle:NSByteCountFormatterCountStyleFile];
    return folderSizeStr;
}

- (NSString *)documentPath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = [paths firstObject];
    return basePath;
}

- (NSString *)libraryPath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSString *basePath = [paths firstObject];
    return basePath;
}

- (NSString *)cachePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *basePath = [paths firstObject];
    return basePath;
}

-(unsigned long long)sizeOfFolder:(NSString *)folderPath
{
    NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:nil];
    NSEnumerator *contentsEnumurator = [contents objectEnumerator];
    
    NSString *file;
    unsigned long long folderSize = 0;
    
    while (file = [contentsEnumurator nextObject]) {
        NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[folderPath stringByAppendingPathComponent:file] error:nil];
        folderSize += [[fileAttributes objectForKey:NSFileSize] intValue];
    }
    return folderSize;
}
@end

四丶注意

1.上面的判断网络类型是私有api再强调一次;
2.[UIApplication sharedApplication]是单例不要alloc;

...后面再继续添加吧;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,226评论 25 707
  • 1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现cl...
    以德扶人阅读 2,302评论 2 50
  • 场景: 自己一直在仓库A下工作,现在需要从仓库B中拉取一个分支过来,继续开发。 步骤: 查看已有远程仓库:git ...
    iLynn阅读 6,620评论 0 1
  • 我是六班的,前面的五班里有个经常穿红衣服的男孩,寥寥见过几次面,是我看他的那种。 感觉他是个话不多的人,就像你一样...
    9991125阅读 309评论 0 0
  • 感情和责任 R eading 原文片段 有一对夫妻来找我做婚姻协谈,两人的婚姻问题出在丈夫喝酒。我要求那位太太向她...
    YangLittle阅读 386评论 0 2