[iOS]使用UIActivityViewController实现AirDrop功能
AirDrop是iOS7中新增的一个近距离分享功能,两个相邻的iOS设备可以通过AirDrop实现传递图片、文件等功能,有了AirDrop基本上可抛弃类似Dropbox的ShareLink和PublicFolder功能。
iOS7的SDK中已经在UIActivityViewController中内置了AirDrop功能,使用时与分享到twitter和facebook的方式基本一致,只需要将需要传递的文件URL设置给UIActivityViewController对象的ActivityItems对象即可,区别在于:如果传递文件,那么URL应该是“file://”开头,而不是常见的“http://”开头
参考代码:
NSString *filePath = "Documents/aaa.png" NSURL *url = [NSURL fileURLWithPath:filePath]; NSArray *items = [NSArray ArrayWithObjects:url,nil]; UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; [self presentViewController:activityViewController animated:YES completion:nil]; |
如果只想使用AirDrop而不使用其他分享功能,只需要设置UIActivityViewController的excludedActivityTypes属性即可。
以下是可以隐藏的对象
#6.0开始支持 UIKIT_EXTERN NSString *const UIActivityTypePostToFacebook UIKIT_EXTERN NSString *const UIActivityTypePostToTwitter UIKIT_EXTERN NSString *const UIActivityTypePostToWeibo UIKIT_EXTERN NSString *const UIActivityTypeMessage UIKIT_EXTERN NSString *const UIActivityTypeMail UIKIT_EXTERN NSString *const UIActivityTypePrint UIKIT_EXTERN NSString *const UIActivityTypeCopyToPasteboard UIKIT_EXTERN NSString *const UIActivityTypeAssignToContact UIKIT_EXTERN NSString *const UIActivityTypeSaveToCameraRoll #7.0以后新增 UIKIT_EXTERN NSString *const UIActivityTypeAddToReadingList UIKIT_EXTERN NSString *const UIActivityTypePostToFlickr UIKIT_EXTERN NSString *const UIActivityTypePostToVimeo UIKIT_EXTERN NSString *const UIActivityTypePostToTencentWeibo UIKIT_EXTERN NSString *const UIActivityTypeAirDrop |
具体用法如下,这里只保留AirDrop:
NSArray *excludedActivities = @[UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo]; activityViewController.excludedActivityTypes = excludedActivities; |
完整的代码:
NSString *filePath = "Documents/aaa.png" NSURL *url = [NSURL fileURLWithPath:filePath]; NSArray *items = [NSArray ArrayWithObjects:url,nil]; UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; NSArray *excludedActivities = @[UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo]; activityViewController.excludedActivityTypes = excludedActivities; [self presentViewController:activityViewController animated:YES completion:nil]; |
关于文件路径URL,一般APP的用户数据都在APP的Documents目录下,使用”Documents/aaa.png”的方式即可取得
如果需要使用Bundle路径下的文件可以使用以下方式
NSString *fileName=@"aaa.png" NSArray *fileComponents = [filename componentsSeparatedByString:@"."]; NSString *filePath = nil; if([fileComponents count] == 0) { }else if([fileComponents count] == 1) { filePath = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:nil]; }else if([fileComponents count] == 2) { filePath = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]]; } NSURL *url = [NSURL fileURLWithPath:filePath]; |
Recent Comments