学习笔记-使用Airdrop进行文件分享

2016-12-26  本文已影响729人  Mystical

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能打开相应类型的文件,需要进行以下几步操作:

1.png

Handler rank 为app对文件的处理等级

配置好以上信息之后,可以在TARGET/info中查看配置情况

3.png
#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;
}

附-可能会使用到的一些方法

// 创建文件压缩后的路径
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);
}
上一篇下一篇

猜你喜欢

热点阅读