Airdrop分享功能實(shí)現(xiàn)
UIActivityViewController類提供了內(nèi)置的AirDrop功能幸斥,在應(yīng)用中整合Airdrop只需要幾行代碼即可完成該功能妹田。
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];// items 將在后文給出解釋
[self presentViewController:activityViewController animated:YES completion:nil];
以上代碼蕴轨,你就能通過AirDrop選項(xiàng)啟用activity view。
你也可以根據(jù)需要,拒絕特定的分享類型是趴,也就是說,可以通過排除所有的活動(dòng)僅展示通過AirDrop進(jìn)行分享暂筝。添加如下代碼:
NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
UIActivityTypePostToWeibo,
UIActivityTypeMessage, UIActivityTypeMail,
UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];
controller.excludedActivityTypes = excludedActivities;
我們需要將要分享的文件轉(zhuǎn)換為URL object箩言,創(chuàng)建了相應(yīng)的數(shù)組,并把它傳遞給UIActivityViewController以用來進(jìn)行AirDrop分享(上文代碼中的items)焕襟。
可以通過以下代碼陨收,將文件轉(zhuǎn)換為URL object:
NSURL *url = [NSURL fileURLWithPath:filePath];
NSArray *items = [NSArray arrayWithObjects:url, nil];
接收Airdrop傳輸?shù)奈募?/h3>
在系統(tǒng)中,蘋果用UTIs來處理數(shù)據(jù)類型的標(biāo)示鸵赖,也就是务漩,一個(gè)uti是用來標(biāo)示特定類型的數(shù)據(jù)或文件。UTls清單它褪。
要使App能打開相應(yīng)類型的文件饵骨,需要進(jìn)行以下幾步操作:
- plist文件配置(以zip類型文件為例)
1.png
Handler rank 為app對(duì)文件的處理等級(jí)
配置好以上信息之后,可以在TARGET/info中查看配置情況
3.png
- 文件接收處理
在iOS9.0之后茫打,回調(diào)方法有變動(dòng)
#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;
}
附-可能會(huì)使用到的一些方法
- 文件壓縮
文件壓縮推薦使用第三方庫(kù):ZipArchive
// 創(chuàng)建文件壓縮后的路徑
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];
//列舉目錄內(nèi)容居触,可以遍歷子目錄
while((path = [myDirectoryEnumerator nextObject])!= nil)
{
NSLog(@"%@",path);
}