2

好吧,我想这个问题说明了一切

我愿意使用私有 API,我正在尝试创建一个应用程序,如果它检测到某个 GPS:位置,相机功能应该自行禁用。. . .

4

2 回答 2

2

我假设您想在 iDevice 位于特定位置时禁用相机使用。我不认为你可以,成功。即使您可以编写一个应用程序,当它检测到某个纬度内的位置时禁用相机,大概是通过自己激活相机并且不允许使用它,也不能保证您的应用程序甚至会在后台运行。此外,位置服务可能会关闭,您的应用程序将无法知道其位置。您还必须越狱设备才能绕过沙盒。现在没有办法在 iOS 中编写通用的守护进程,当然也不是捕获硬件资源的。如果我误解了,您可能需要详细说明您打算做什么。

于 2012-09-27T18:39:33.203 回答
2

注意:此解决方案不使用UIImagePicker. 我假设您指的是内置的 Camera.app,并且只是想要某种方式来禁用它。

如果您愿意越狱您的设备(我在您的评论中看到),那么您应该能够做到这一点。

首先,您需要编写一个 iOS Launch Daemon。这是一个后台进程(没有 UI),它只是一直运行并监控位置。有关如何编写启动守护程序的示例,请参阅博客。此示例甚至显示了一个监视位置的守护程序,这正是您所需要的。

然后,当您的守护程序检测到您位于特殊位置时,您只需更改/Applications/Camera.app/Camera. 使其不可执行(chmod 664而不是775)。

chmod通过进行系统调用从您的应用程序调用命令:

system("chmod 664 /Applications/Camera.app/Camera");

或者,您也可以使用NSFileManagerAPI 来修改文件的权限属性。

当然,当您离开该区域时,您需要将权限更改回来(您可能想让应用程序保守,以便如果没有可用的位置数据,在定时器延迟后,您重新启用相机)。

我相信我上面链接的守护程序教程会将您的守护程序设置为以 root 用户 (userid = 0) 运行,这可能是更改相机可执行权限所必需的。如果没有,请发表回复,我会挖掘更多信息。我的手机上运行了多个守护进程(我前段时间写的),它们确实具有 root 权限,所以我一定想出了如何做到这一点:)

此外,正如 Owen 所说,定位服务可能已关闭,或者定位修复可能不可用。我不确定这个应用程序是否只适合你,提醒你不要在某个位置拍照,或者如果它需要保护其他用户,他们会试图破坏保护。如果这对您来说是个问题,请发布更多信息,我们将从那里开始......

注意:如果在您进入无图片区域之前它已经在运行,我不确定这是否还需要禁用相机。如果是这样,您可以让您的守护进程也对相机进程发出kill命令。

于 2012-09-30T12:07:44.677 回答