iOS App让自己的应用在其他应用中打开列表中显示、iOS把自己的应用添加到”活动“、将PDF文件Open In MyApp

来源:互联网 发布:抗美援朝有必要吗 知乎 编辑:程序博客网 时间:2024/04/30 11:46

像百度网盘等应用,里面的文件打开时,都可以通过以下应用再打开文件。下面红色框框内的我的jpg就是我做的一个例子。因为例子没有提供Icon,所以显示的是默认icon。


下面就是这例子的主要步骤和代码。


例子是一个打开jpg图片程序。


1、在项目的**info.plist文件中添加:

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <key>CFBundleDocumentTypes</key>  
  2.     <array>  
  3.         <dict>  
  4.             <key>CFBundleTypeIconFiles</key>  
  5.             <array>  
  6.                 <string>icon@2x.png</string>  
  7.                 <string>icon.png</string>  
  8.             </array>  
  9.             <key>CFBundleTypeName</key>  
  10.             <string>Molecules Structure File</string>  
  11.             <key>CFBundleTypeRole</key>  
  12.             <string>Viewer</string>  
  13.             <key>LSHandlerRank</key>  
  14.             <string>Owner</string>  
  15.             <key>LSItemContentTypes</key>  
  16.             <array>  
  17.                 <string>com.fzrong.jpg</string>  
  18.                 <string>org.gnu.gnu-zip-archive</string>  
  19.             </array>  
  20.         </dict>  
  21.     </array>  
  22.     <key>UTExportedTypeDeclarations</key>  
  23.     <array>  
  24.         <dict>  
  25.             <key>UTTypeConformsTo</key>  
  26.             <array>  
  27.                 <string>public.plain-text</string>  
  28.                 <string>public.text</string>  
  29.             </array>  
  30.             <key>UTTypeDescription</key>  
  31.             <string>Molecules Structure File</string>  
  32.             <key>UTTypeIdentifier</key>  
  33.             <string>com.fzrong.jpg</string>  
  34.             <key>UTTypeTagSpecification</key>  
  35.             <dict>  
  36.                 <key>public.filename-extension</key>  
  37.                 <string>jpg</string>  
  38.                 <key>public.mime-type</key>  
  39.                 <string>image/jpg</string>  
  40.             </dict>  
  41.         </dict>  
  42.     </array>  
这就是告诉系统,你能打开 jpg这个文件类型。


2、打开到自己的app时,要截取到过来资源的文件路径:

在Appdelegate里添加代码如下:

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation  
  2. {  
  3.     if (url != nil) {  
  4.         NSString *path = [url absoluteString];  
  5.         NSMutableString *string = [[NSMutableString alloc] initWithString:path];  
  6.         if ([path hasPrefix:@"file://"]) {  
  7.             [string replaceOccurrencesOfString:@"file://" withString:@"" options:NSCaseInsensitiveSearch  range:NSMakeRange(0, path.length)];  
  8.         }  
  9.         [self.viewController openPng:string];  
  10.           
  11.     }  
  12.       
  13.     return YES;  
  14. }  

要去掉file://文件路径的头,要不然找不到资源。

3、在自己的ViewController里打开jgp显示:

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. - (void)openPng:(NSString*)string  
  2. {  
  3.     UIImage *image = [[UIImage alloc] initWithContentsOfFile:string];  
  4.     float width = image.size.width;  
  5.     float height = image.size.height;  
  6.     if (width > 320) {  
  7.         height = (height/width) * 300;  
  8.         width = 300;  
  9.     }  
  10.       
  11.     CGRect frame = CGRectMake(020, width, height);  
  12.     imageView.frame = frame;  
  13.       
  14.     imageView.image = image;  
  15.       
  16. }  

打开之后的效果是这样的:


注意:这都是在真机上演示的。


这里例子咱们可以扩展,怎么打开网盘里的gif图片啊,还有其他自己自定义的格式也可以。


项目完整代码已经上传到:http://download.csdn.net/detail/totogo2010/7460929

或者github: https://github.com/schelling/openFileType


参考:

https://developer.apple.com/library/ios/qa/qa1587/_index.html 

http://stackoverflow.com/questions/20869815/open-file-from-local-file-system-with-default-application-ios

容芳志 (http://blog.csdn.net/totogo2010)

本文遵循“署名-非商业用途-保持一致”创作公用协议



写了一个很好的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上查看代码片派生到我的代码片
  1. //- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {  
  2. //    return YES;  
  3. //}  
  4.   
  5. -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {  
  6.     if (url && [url isFileURL]) {  
  7.         DocumentViewController *documentViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateInitialViewController];  
  8.         [documentViewController handleDocumentOpenURL:url];  
  9.         return YES;  
  10.     }  
  11.     return NO;  
  12. }  


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

再看看DocumentViewController中的处理方法:

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. - (void)handleDocumentOpenURL:(NSURL *)url {  
  2.     [self displayAlert:[url absoluteString]];  
  3. }  
  4.   
  5. -(void) displayAlert:(NSString *) str {  
  6.     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"  
  7.                                                     message:str  
  8.                                                    delegate:nil  
  9.                                           cancelButtonTitle:@"OK"                                                                                         otherButtonTitles:nil];  
  10.     [alert show];  
  11. }  


Run:

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


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

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


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

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


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

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


0 0
原创粉丝点击