菜鸟教程小白 发表于 2022-12-12 10:00:43

ios - 文件系统事件通知(越狱设备)


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

<p>有人知道我应该使用哪个私有(private) API 吗?</p>

<p>我的应用程序是一个守护程序应用程序,在后台运行,它必须能够接收这些事件。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>iOS 实际上让这对你来说真的很容易。</p>

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

<p>您可以配置启动守护程序以仅在检测到新文件系统事件时启动。 <a href="http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#//apple_ref/doc/uid/10000172i-SW7-SW8" rel="noreferrer noopener nofollow">See the Apple docs on (OS X) Launch Daemons here</a> </p>

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

<pre class="lang-objc prettyprint-override"><code>int main(int argc, char *argv[]) {
    // if we&#39;re here, we know there&#39;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&#39;s more pictures

    return 0;
}
</code></pre>

<p>这里的关键是使用 <code>/System/Library/LaunchDaemons/com.example.MyApp.plist</code> 文件,如下所示:</p>

<pre class="lang-xml prettyprint-override"><code>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;

&lt;!DOCTYPE plist PUBLIC &#34;-//Apple//DTD PLIST 1.0//EN&#34; &#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&#34;&gt;
&lt;plist version=&#34;1.0&#34;&gt;
&lt;dict&gt;
    &lt;key&gt;Label&lt;/key&gt;
    &lt;string&gt;com.example.MyApp&lt;/string&gt;
    &lt;key&gt;ProgramArguments&lt;/key&gt;
    &lt;array&gt;
      &lt;string&gt;/Applications/MyApp.app/MyDaemonExecutable&lt;/string&gt;
      &lt;string&gt;optional_argument_one&lt;/string&gt;   &lt;!-- passed to main() as argv[] --&gt;
      &lt;string&gt;optional_argument_two&lt;/string&gt;   &lt;!-- passed to main() as argv[] --&gt;
    &lt;/array&gt;
    &lt;key&gt;WatchPaths&lt;/key&gt;
    &lt;array&gt;
      &lt;string&gt;/private/var/mobile/Media/DCIM/100APPLE&lt;/string&gt;               
      &lt;string&gt;/private/var/mobile/Media/DCIM/101APPLE&lt;/string&gt;
    &lt;/array&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 文件系统事件通知(越狱设备),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15728248/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15728248/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 文件系统事件通知(越狱设备)