2013-04-03 49 views
-2

是否可以在應用程序範圍之外的iOS上檢測不活動? 如果不是,即使在前臺,是否可以定期啓動應用程序?我的目標是在用戶沒有與設備進行交互的一段時間後,循環播放一些視頻。 任何解決方法或私有API也是可行的解決方案。iOS:檢測不活動或定期啓動應用程序

THanks提前!

+0

不可以,也不可以。 – QED

+2

我真的很希望這不可能! –

回答

0

基於蘋果對iPhone/iPod/iPad的限制,您不允許對用戶設備進行此類控制。

因此,實際上沒有辦法實現這一點,除非你可能越獄你的設備,我沒有太多的知識。

希望這有助於!

0

在一個越獄的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); 
相關問題