是否可以在應用程序範圍之外的iOS上檢測不活動? 如果不是,即使在前臺,是否可以定期啓動應用程序?我的目標是在用戶沒有與設備進行交互的一段時間後,循環播放一些視頻。 任何解決方法或私有API也是可行的解決方案。iOS:檢測不活動或定期啓動應用程序
THanks提前!
是否可以在應用程序範圍之外的iOS上檢測不活動? 如果不是,即使在前臺,是否可以定期啓動應用程序?我的目標是在用戶沒有與設備進行交互的一段時間後,循環播放一些視頻。 任何解決方法或私有API也是可行的解決方案。iOS:檢測不活動或定期啓動應用程序
THanks提前!
基於蘋果對iPhone/iPod/iPad的限制,您不允許對用戶設備進行此類控制。
因此,實際上沒有辦法實現這一點,除非你可能越獄你的設備,我沒有太多的知識。
希望這有助於!
在一個越獄的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);
不可以,也不可以。 – QED
我真的很希望這不可能! –