Airdrop分享功能实现
UIActivityViewController类提供了内置的AirDrop功能,在应用中整合Airdrop只需要几行代码即可完成该功能。
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];// items 将在后文给出解释
[self presentViewController:activityViewController animated:YES completion:nil];
以上代码,你就能通过AirDrop选项启用activity view。
你也可以根据需要,拒绝特定的分享类型,也就是说,可以通过排除所有的活动仅展示通过AirDrop进行分享。添加如下代码:
NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
UIActivityTypePostToWeibo,
UIActivityTypeMessage, UIActivityTypeMail,
UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];
controller.excludedActivityTypes = excludedActivities;
我们需要将要分享的文件转换为URL object,创建了相应的数组,并把它传递给UIActivityViewController以用来进行AirDrop分享(上文代码中的items)。
可以通过以下代码,将文件转换为URL object:
NSURL *url = [NSURL fileURLWithPath:filePath];
NSArray *items = [NSArray arrayWithObjects:url, nil];
接收Airdrop传输的文件
在系统中,苹果用UTIs来处理数据类型的标示,也就是,一个uti是用来标示特定类型的数据或文件。UTls清单。
要使App能打开相应类型的文件,需要进行以下几步操作:
- plist文件配置(以zip类型文件为例)
Handler rank 为app对文件的处理等级
配置好以上信息之后,可以在TARGET/info中查看配置情况
- 文件接收处理
在iOS9.0之后,回调方法有变动
#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation
{
return YES;
}
#else
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options
{
return YES;
}
附-可能会使用到的一些方法
- 文件压缩
文件压缩推荐使用第三方库:ZipArchive
// 创建文件压缩后的路径
NSString *zipPath = [docDataPath stringByAppendingFormat:@"/share.zip"];// docDataPath为Documents目录
ZipArchive *zip = [[ZipArchive alloc]init];
[zip CreateZipFile2:zipPath];
// 添加文件
[zip addFileToZip:path1 newname:path2];
// path1 要压缩文件的全路径
// path2 要压缩文件的文件名
[zip CloseZipFile2];
- 列出文件夹下所有文件
NSString *path = self.filePath; // 要列出来的目录
NSFileManager *myFileManager=[NSFileManager defaultManager];
NSDirectoryEnumerator *myDirectoryEnumerator;
myDirectoryEnumerator=[myFileManager enumeratorAtPath:path];
//列举目录内容,可以遍历子目录
while((path = [myDirectoryEnumerator nextObject])!= nil)
{
NSLog(@"%@",path);
}