iOS 其他应用的文件如何在分享中使用自己的应用打开

废话少说
一、第一步:先配置好plist文件
右击info.plist如下图文件打开

根据自己需要配置支持的文件类型,也可使用property List中配置,一样的
其他的文件可是参考文档:System-Declared Uniform Type Identifiers

可复制的代码:↓

	<key>CFBundleDocumentTypes</key>
	<array>
		<dict>
			<key>CFBundleTypeName</key>
			<string>Audio File</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>com.apple.m4a-audio</string>
				<string>public.mpeg-4-audio</string>
				<string>public.aac-audio</string>
				<string>org.xiph.flac</string>
				<string>com.microsoft.waveform-audio</string>
				<string>public.mp3</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeName</key>
			<string> Video File</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>public.mpeg-4</string>
				<string>public.mp4</string>
				<string>public.mov</string>
			</array>
		</dict>
	</array>

 这样就可以在其他应用中的文件分享列表中看见自己的应用。只有你配置文件中支持的文件分享时才能在应用列表中找到自己的应用,如果打开的不是你配置中支持的文件,在列表是找不到应用的。

二、第二步如何去获取到分享到本应用的文件呢?
如果有从其他应用分享应用过来的话,会调用SceneDelegate中的方法

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts{
    for (UIOpenURLContext *urlContext in URLContexts) {
        NSURL *url = urlContext.URL;
        if ([url.scheme isEqualToString:@"file"]) {
            [self addShareFileWithUrl:url];
        }
    }
}

- (void)addShareFileWithUrl:(NSURL*)url{
    
    AVAsset *asset = [AVAsset assetWithURL:url];
    CMTime duration = asset.duration;
    float durationInSeconds = CMTimeGetSeconds(duration);

    if (durationInSeconds > 1.0) {
       //导入文件后需要的操作
    }else{
        [PopuView showTipTextNoMask:LocalizedString(@"导入的音频时长应大于1秒", nil) withTimeInterval:1.0];
    }
}

如果需要判断分享过来的文件是什么类型的文件,可以使用标识符UTI做判断。
 

NSString *fileUTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[newURL pathExtension], NULL);

// 判断文件的UTI是否是音频类型
if (UTTypeConformsTo((__bridge CFStringRef)fileUTI, kUTTypeAudio)) {
    NSLog(@"文件是音频类型");

} else if (UTTypeConformsTo((__bridge CFStringRef)fileUTI, kUTTypeVideo) || UTTypeConformsTo((__bridge CFStringRef)fileUTI, kUTTypeMovie)){
   NSLog(@"文件是视频类型");

}
           


三、分享文件给其他应用:
​​​​​​​

NSURL *fileURL = [NSURL fileURLWithPath:path];
NSArray *items = @[fileURL];
// 创建分享控制器
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAirDrop];
[self presentViewController:activityViewController animated:YES completion:nil];

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值