我希望用另一个应用程序打开一个文件(存储在我的应用程序中)。
目前,我正在使用openURL(有一个专用的url方案),如果我使用互联网上托管的文件,它可以正常工作,但我想使用本地文件,所以: a)它脱机工作 b)很多时候我的用户要么不在小区覆盖范围内,要么在国外漫游
到目前为止我尝试了什么: 我没有运气告诉openURL使用本地文件,我尝试了一些方法,但它们都是这样的
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"ext"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
[[UIApplication sharedApplication] openURL:fileURL];
也
NSURL *fileURL = [[NSBundle mainBundle] URLForResource: @"test" withExtension:@"ext"];
[[UIApplication sharedApplication] openURL:fileURL];
还手动使用具有localhost /和file://以及var / mobile etc路径
的不同变体的字符串没有任何作品(无论如何对我来说)
所以,我环顾四周,看到UIDocumentInteractionController
我可以使用UIDocumentInteractionController让用户使用其他应用程序打开我的本地文件 - 但是它总是提供其他应用程序的多个选项,例如,其他应用程序之一可以是“Dropbox”。
我不想让用户下载(或技术上传)我的文件副本以供其他方式使用。它包含我不希望随时可用的数据。
当我的目标应用程序打开文件时(不是我的btw),它不允许任何类型的保存或访问原始数据。
我意识到,通过在我的应用程序中包含该文件,任何认真获取它的人都可以,我只是不想闪现一个大菜单说'如果你想让你自己的副本做衍生的话从'
开始工作理想情况下,我可以使用openURL,但我认为这是因为其他应用程序没有响应的“沙盒” - 在Android中我使用mode_world_readable将文件声明为其他应用程序可读(因此将其放在沙箱之外,它不允许其他应用程序写入它,只是阅读) - 无论如何在iOS上做同样的事情?
否则,如果我可以强制UIDocumentInteractionController使用特定的应用程序而不显示菜单 - 那也没关系。
Similar question asked a while ago
对于长时间阅读感到抱歉,感谢任何帮助。
编辑: 我刚收到Apple Tech支持人员的答复,他们告诉我目前这不可能(就在iOS 6发布之后)
答案 0 :(得分:0)
是的,由于iOS上的严格沙盒,您受到限制。这是一些想法。
您可以通过继承QLPreviewController来覆盖UIDocumentInteractionController的功能。然后,您可以替换显示“打开方式”菜单的标准栏按钮项目。看一下这篇文章,找到一个子类化QLPreviewController的解决方案:QLPreviewController remove or add UIBarButtonItems
当然,我相信应用程序间共享的工作方式很大程度上不在您手中。如果某个应用已注册为能够处理某种类型的文件,则无论您是否愿意,它都会在“打开”列表中显示为其中一个选项。我不相信您可以过滤该列表中显示的应用程序。
以下是我曾考虑过但从未尝试过的两个实验性想法:
您可以对您尝试传递的文件中的数据进行base64编码 - 这只是将二进制文件转换为文本 - 并将其作为用于启动其他应用程序的自定义URL的一部分。然后另一个应用程序可以base64解码相同的数据回二进制。不足之处在于URL的长度有限,这意味着您发送的“文件”必须非常小。
接下来,我甚至不知道这是否可行,但我想知道你是否可以使用一些steganograhpy算法将文档数据嵌入到图像中,然后将其交给相机滚。然后,另一个应用程序可以打开相机胶卷并再次将图像解码回数据。 ......是的我知道......模糊不清,但尝试实施可能会很有趣。 ; - )
不确定是否有任何帮助,但你确实说“赞赏任何帮助”。 ; - )
最好的问候。