banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

[iOS] UIActivityViewControllerを使用してAirDrop機能を実現する

AirDrop は iOS7 で追加された近距離共有機能であり、隣接する 2 つの iOS デバイス間で画像やファイルの送受信などの機能を実現することができます。AirDrop があれば、ShareLink や PublicFolder などの Dropbox の機能はほぼ不要になります。

iOS7 の SDK には、UIActivityViewController に AirDrop 機能が組み込まれています。使用方法は Twitter や Facebook への共有とほぼ同じで、UIActivityViewController オブジェクトの ActivityItems に送信したいファイルの URL を設定するだけです。違いは、ファイルを送信する場合、URL は「file://」で始まる必要があり、一般的な「http://」ではありません。参考コード:

NSString *filePath = "Documents/aaa.png"
NSURL *url = [NSURL fileURLWithPath];
NSArray *items = [NSArray ArrayWithObjects,nil];
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems applicationActivities];
[self presentViewController animated completion];

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];
NSArray *items = [NSArray ArrayWithObjects,nil];
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems applicationActivities];
NSArray *excludedActivities = @[UIActivityTypePostToFacebook,
UIActivityTypePostToTwitter,
UIActivityTypePostToWeibo,
UIActivityTypeMessage,
UIActivityTypeMail,
UIActivityTypePrint,
UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo,
UIActivityTypePostToTencentWeibo];
activityViewController.excludedActivityTypes = excludedActivities;
[self presentViewController animated completion];

ファイルパス URL については、一般的にアプリのユーザーデータはアプリの 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];
}else if([fileComponents count] == 2) {
filePath = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0]
ofType:[fileComponents objectAtIndex:1]];
}
NSURL *url = [NSURL fileURLWithPath];

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。