2

当有新的文件系统事件时,我需要能够接收通知。例如,添加新图片时。我需要能够接收整个文件系统的这些通知,而不仅仅是我的应用程序所在的沙箱。这适用于越狱的设备吗?

有谁知道我应该使用哪个私有 API?

我的应用程序是一个守护程序应用程序并在后台运行,它必须能够接收这些事件。

4

1 回答 1

1

iOS 实际上让这对你来说真的很容易。

我不知道可能还希望您的守护进程做什么,但如果您只想让它持续保持活动状态以监视新的图片文件,那么您还有另一种选择。

您可以配置启动守护程序以仅在检测到新文件系统事件时启动。 在此处查看有关 (OS X) 启动守护程序的 Apple 文档

然后,您的启动守护程序可执行文件可以只是一个简单的main()程序。当写入新的图片文件时,系统将启动它,然后您可以使用NSFileManagerALAssetLibrary检查目录中的最新文件。您可能希望保存一个指示上次运行守护程序时间的首选项,以确保您跟踪所有新文件。

int main(int argc, char *argv[]) {
    // if we're here, we know there's a new picture, so use
    // NSFileManager to check for photos
    // or, see something like http://stackoverflow.com/q/9730973/119114 ... 

    // and then we exit the process and let launchd start us
    // again when there's more pictures

    return 0;
}

这里的关键是使用这样的/System/Library/LaunchDaemons/com.example.MyApp.plist文件:

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.example.MyApp</string> 
    <key>ProgramArguments</key> 
    <array> 
        <string>/Applications/MyApp.app/MyDaemonExecutable</string> 
        <string>optional_argument_one</string>   <!-- passed to main() as argv[] -->
        <string>optional_argument_two</string>   <!-- passed to main() as argv[] -->
    </array> 
    <key>WatchPaths</key> 
    <array> 
        <string>/private/var/mobile/Media/DCIM/100APPLE</string>                
        <string>/private/var/mobile/Media/DCIM/101APPLE</string> 
    </array> 
</dict> 
</plist> 
于 2013-04-01T01:47:29.347 回答