美文网首页附件方面的东西
iOS App让自己的应用在其他应用中打开列表中显示

iOS App让自己的应用在其他应用中打开列表中显示

作者: oneYing | 来源:发表于2016-09-29 15:52 被阅读1868次

原文标题  将PDF文件Open In MyApp

写了一个很好的PDF阅读软件,那么怎么让用户根据提示打开我们的应用浏览阅读,提高程序的使用率呢?本文就是针对这个问题而来,方法:修改-Info.plist文件。

1.在plist文件中添加一个URLTypes字段,该字段指定程序的对外接口:

这部分可以参考我之前写的博客:iOS调用外部程序和系统程序。

2.另外添加一个Documents Type字段,该字段指定与程序关联的文件类型,详情参考System-Declared Uniform Type Identifiers。

其中CFBundleTypeExtensions指定文件类型,例如pdf,doc,这个是不能随便填的。

CFBundleTypeIconFiles指定用UIActionSheet向用户提示打开应用时显示的图标。

DocumentTypeName可以自定,对应文件类型名。

Document Content Type UTIs指定官方指定的文件类型,UTIs即Uniform Type Identifiers。

如果要关联多个文件类型可以在Document Types中设置多个Item,这里我设置的关联类型包括pdf,doc,ppt。

接下来上代码。

AppDelegate类的代码:

[objc] view plain copy 在CODE上查看代码片派生到我的代码片

//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

//    return YES;

//}

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

if (url && [url isFileURL]) {

DocumentViewController *documentViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateInitialViewController];

[documentViewController handleDocumentOpenURL:url];

return YES;

}

return NO;

}

其中handleOpenURL确定是否处理外部程序的调用请求,后者则是打开文件的URL。

再看看DocumentViewController中的处理方法:

[objc] view plain copy 在CODE上查看代码片派生到我的代码片

- (void)handleDocumentOpenURL:(NSURL *)url {

[self displayAlert:[url absoluteString]];

}

-(void) displayAlert:(NSString *) str {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"

message:str

delegate:nil

cancelButtonTitle:@"OK"                                                                                        otherButtonTitles:nil];

[alert show];

}

Run:

打开邮箱客户端,随便打开一封邮件中的附件,如pdf,doc格式,选择用其它应用打开(建议真机调试):

上面图标P对应的程序就是我们的Demo。

点击该Demo,我们的程序将被启动,并调用openURL方法做出处理,结果如下:

AlertView显示的内容就是下载的文件的fileURL。

如果在Mac上运行,打开App的文件夹可以看到对应下载的文件:

该文件在App的Documents/Inbox/目录下。

好吧,将接收到的PDF,DOC,PPT等格式的文件与程序关联的工作已经完成,源文件就在我们下载的目录中,接下来想怎么折腾这个文件都可以了。

相关文章

网友评论

  • MoussyL:我现在app已经配置好支持第三方应用打开用其他应用打开底部弹出的控制台有我自己app,点击跳转过来了,比如gmail邮箱里边的附件,现在有个问题就是,分享的附件是个.docx的文档,但是名字是中文 空格的,分享过来的URL是已经转译过的,例如file:///private/var/mobile/Containers/Data/Application/A1337077-B7D1-47F6-8D0D-E48C688600BE/Documents/Inbox/%3F%3F%20Microsoft%20Word%20%3F%3F%20(2)-6.docx,我解析之后发现中文都变成问好了,看了一下接受到的URL已经是把汉字给我转译成问号了,想问的是,这种路径名是不是在读取文档的时候会有问题,我这里通过dataWithContentsOfURL:读取到的文档是nil,但是图片或者pdf都是有数据的,希望大神帮忙解答下,谢谢啦

本文标题:iOS App让自己的应用在其他应用中打开列表中显示

本文链接:https://www.haomeiwen.com/subject/jqtlyttx.html