【问题标题】:iOS: detecting inactivity or periodically launch an appiOS:检测不活动或定期启动应用程序
【发布时间】:2013-04-03 14:09:13
【问题描述】:

是否可以在应用程序范围之外检测 iOS 上的不活动? 如果没有,即使在前台也可以定期启动应用程序吗?我的目标是在用户不与设备交互的一段时间后循环播放一些视频。 任何变通方法或私有 API 也是可行的解决方案。

提前致谢!

【问题讨论】:

  • 我真的,真的希望这不可能!

标签: ios background locking wakelock user-inactivity


【解决方案1】:

根据 Apple 对 iPhone/iPod/iPad 的限制,您不得对用户的设备进行此类控制。

因此,实际上没有可能的方法来实现这一点,除非您可能越狱您的设备,我对此知之甚少。

希望这有帮助!

【讨论】:

    【解决方案2】:

    在越狱的 iOS 设备上,如果设备未锁定/进入睡眠状态,启动守护程序可能会发生类似的情况。 (如果设备被锁定也有可能,但我不知道该怎么做。)

    我将简要介绍一下步骤;如果您需要更多详细信息,请告诉我。

    首先,创建一个启动守护进程。您不想将UIApplication 用于启动守护程序,因此您应该创建一个自定义main() 函数。要使其始终在后台运行,您需要将 plist 文件添加到 /Library/LaunchDaemons,名称类似于 com.yourcompany.yourdaemonname

    输入以下键应该可以工作:

    <key>Label</key>
    <string>com.yourcompany.yourdaemonname</string>
    
    <key>MachServices</key>
    <dict>
        <key>com.yourcompany.yourdaemonname</key>
        <true/>
    </dict>
    
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/daemon/executable</string>
    </array>
    
    <key>UserName</key>
    <string>mobile</string>
    
    <key>OnDemand</key>
    <false/>
    
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
    
    <key>Disabled</key>
    <false/>
    

    如果您不重新启动手机,您可能还需要在安装守护程序后调用launchctl load /Library/LaunchDaemons/com.yourcompany.yourdaemonname.plist(如果您更新,则在重新安装之前调用launchctl unload)。我不完全确定。

    一旦您的守护程序运行,您可以通过安排NSTimer 让它定期运行。我不确定是否有办法检查手机空闲了多长时间,但这可能是可能的。但是,一旦您解决了该问题,您就可以使用以下代码启动一个应用程序(您的主 UI 应用程序):

    #import <dlfcn.h>
    #define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
    ...
    void* sbServices = dlopen(SBSERVPATH, RTLD_LAZY);
    int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) = dlsym(sbServices, "SBSLaunchApplicationWithIdentifier");
    int result;
    result = SBSLaunchApplicationWithIdentifier(CFSTR("com.yourcompany.youruiapp"), false);
    dlclose(sbServices);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 2018-10-21
      • 1970-01-01
      • 2016-04-19
      • 2015-03-02
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多