美文网首页
iOS UIApplication

iOS UIApplication

作者: 本本的开心牧场 | 来源:发表于2018-08-04 13:27 被阅读0次

    记录一下这个强大的对象

    UIApplication简介
    • UIApplication对象是应用程序的象征。
    • 每一个应用程序都有自己的UIApplication对象,而且是单例。
    • 一个iOS程序启动后创建的第一个对象就是UIApplication对象。
    • 通过UIApplication *app = [UIApplication sharedApplication];可以获得这个单例对象。
    • 利用UIApplication对象能进行一些应用级别的操作。

    实际在程序入口main中就立刻创建了UIApplication对象,所以我们能够通过单例拿到

    int main(int argc, char * argv[]) {
        @autoreleasepool {
    //这段代码就return了UIApplication对象
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }
    
    
    UIApplication能做些什么?
    • 获取控制器的keyWindow
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    
    //值得注意的是,这时候获取到的window不一定是屏幕最前面的window
    //因为像UIAlert和键盘等,都是在屏幕最前面的window,或者是modal出来的控制器。
    //这时候需要获取最前面的窗口,不然就可能显示出问题。
    获取顶层的keyWindow
    UIWindow window = [[UIApplication sharedApplication].windows lastObject];
    [window addSubview:aView];// 将要显示的view添加到窗口
    
    
    • 设置应用程序图标右上角的红色提醒数字
    UIApplication *app = [UIApplication sharedApplication];
    app.applicationIconBadgeNumber = 30;
    // 创建通知对象
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
    // 注册用户通知
    [app registerUserNotificationSettings:setting];
    
    
    • 设置联网指示器的可见性
    UIApplication *app = [UIApplication sharedApplication];
    app.networkActivityIndicatorVisible= YES;
    
    • 功能十分强大的openURL:方法
        UIApplication *app = [UIApplication sharedApplication];
        //    iOS10 新方法
        //    可以异步执行open操作和主线程执行回调.
        //    ptions目前可传入参数Key在UIApplication头文件只有一个:
        //    UIApplicationOpenURLOptionUniversalLinksOnly  默认为no
        //    设置yes时 只允许通过这个Link所代表的iOS应用跳转的方式打开这个链接 否则就会返回success为false
        //    就是说只有安装了Link所对应的App的情况下才能打开这个Universal Link,而不是通过启动Safari方式打开这个Link的代表的网站.
        //    打电话
        [app openURL:[NSURL URLWithString:@"tel://110"] options:@{} completionHandler:nil];
        //    发短信
        [app openURL:[NSURL URLWithString:@"sms://1008"] options:@{} completionHandler:nil];
        //    发邮件
        [app openURL:[NSURL URLWithString:@"mailto://xxcc@fox.com"] options:@{} completionHandler:nil];
        //    打开一个网页资源
        [app openURL:[NSURL URLWithString:@"http://www.baidu.com"] options:@{} completionHandler:nil];
        //    当然也可以打开其他app
    
    • 判断程序运行状态
    //判断程序运行状态
        /*
         UIApplicationStateActive,   //活跃
         UIApplicationStateInactive,   //应用程序失去焦点 程序还在运行但是不可交互
         UIApplicationStateBackground    //后台模式
         */
     UIApplication *app = [UIApplication sharedApplication];
     if(app.applicationState ==UIApplicationStateActive){
            NSLog(@"程序在运行状态");
        }
    
    
    • 阻止屏幕变暗进入休眠状态
      //阻止屏幕变暗,很耗电操作。
       UIApplication *app = [UIApplication sharedApplication];
       app.idleTimerDisabled =YES;
    
    UIApplication Delegate

    当app收到干扰,例如程序运行中来电等,就会产生一些系统事件,这时UIApplicaiton会通知它的代理delegate对象,让delegate代理来处理这些系统事件。
    delegate可以处理的事件

    1. 应用程序的生命周期事件(如程序启动和关闭)
    2. 系统事件(如来电)
    3. 内存警告(用处较多)

    每当我们创建项目时,程序中的AppDelegate文件就是UIAppliacation的代理,我们可以发现它已经遵守了UIApplicationDelegate。

    // 应用程序启动完成的时候就会调用AppDelegate的方法
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        return YES;
    }
    
    // 当应用程序失去焦点的时候调用
    - (void)applicationWillResignActive:(UIApplication *)application {
        NSLog(@"%s",__func__);
    }
    
    // 当应用程序进入后台的时候调用
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        NSLog(@"%s",__func__);
    }
    
    // 当应用程序进入前台的时候调用 (接受到电话会进入后台)
    - (void)applicationWillEnterForeground:(UIApplication *)application {
         NSLog(@"%s",__func__);
    }
    
    // 当应用程序完全获取焦点的时候调用
    // 只有当应用程序完全获取焦点的时候,才能够与用户交互
    - (void)applicationDidBecomeActive:(UIApplication *)application {
         NSLog(@"%s",__func__);
    }
    
     // 当应用程序关闭的时候
    - (void)applicationWillTerminate:(UIApplication *)application {
       NSLog(@"%s",__func__);
    }
    

    END.....

    相关文章

      网友评论

          本文标题:iOS UIApplication

          本文链接:https://www.haomeiwen.com/subject/evhpvftx.html