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

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

 

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

 

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

 

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

 

<key>CFBundleDocumentTypes</key>
	<array>
		<dict>
			<key>CFBundleTypeIconFiles</key>
			<array>
				<string>icon@2x.png</string>
				<string>icon.png</string>
			</array>
			<key>CFBundleTypeName</key>
			<string>Molecules Structure File</string>
			<key>CFBundleTypeRole</key>
			<string>Viewer</string>
			<key>LSHandlerRank</key>
			<string>Owner</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>com.fzrong.jpg</string>
				<string>org.gnu.gnu-zip-archive</string>
			</array>
		</dict>
	</array>
	<key>UTExportedTypeDeclarations</key>
	<array>
		<dict>
			<key>UTTypeConformsTo</key>
			<array>
				<string>public.plain-text</string>
				<string>public.text</string>
			</array>
			<key>UTTypeDescription</key>
			<string>Molecules Structure File</string>
			<key>UTTypeIdentifier</key>
			<string>com.fzrong.jpg</string>
			<key>UTTypeTagSpecification</key>
			<dict>
				<key>public.filename-extension</key>
				<string>jpg</string>
				<key>public.mime-type</key>
				<string>image/jpg</string>
			</dict>
		</dict>
	</array>

这就是告诉系统,你能打开 jpg这个文件类型。

 

 

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

在Appdelegate里添加代码如下:

 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if (url != nil) {
        NSString *path = [url absoluteString];
        NSMutableString *string = [[NSMutableString alloc] initWithString:path];
        if ([path hasPrefix:@"file://"]) {
            [string replaceOccurrencesOfString:@"file://" withString:@"" options:NSCaseInsensitiveSearch  range:NSMakeRange(0, path.length)];
        }
        [self.viewController openPng:string];
        
    }
    
    return YES;
}

 

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

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

 

- (void)openPng:(NSString*)string
{
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:string];
    float width = image.size.width;
    float height = image.size.height;
    if (width > 320) {
        height = (height/width) * 300;
        width = 300;
    }
    
    CGRect frame = CGRectMake(0, 20, width, height);
    imageView.frame = frame;
    
    imageView.image = image;
    
}


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

 

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

 

这里例子咱们可以扩展,怎么打开网盘里的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

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值