【问题标题】:Send Audio by Email通过电子邮件发送音频
【发布时间】:2013-12-17 08:38:59
【问题描述】:

如何从手机获取音频并通过电子邮件分享? 它会可用吗? 我们可以在应用程序中像音乐一样简单地分享它吗?

【问题讨论】:

  • 你想要来自 iPod 或你的捆绑包的音频吗?

标签: ios audio share


【解决方案1】:

您的问题本来可以更好,您应该展示您尝试过的内容、具体问题、实际结果和预期结果。

话虽如此,这听起来像是一个不错的挑战......所以答案如下。

我不确定您是否想从 iPod 或应用程序包中获取音乐,所以我实现了 iPod 版本(在我看来),它更复杂。

SSCCE:

main.m

#import "AppDelegate.h"

int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

AppDelegate.h

@import UIKit;
@import MessageUI;
@import MediaPlayer;

@interface AppDelegate : UIResponder <UIApplicationDelegate, MFMailComposeViewControllerDelegate, MPMediaPickerControllerDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

AppDelegate.m

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];

    UIViewController *controller = [[UIViewController alloc] init];
    _window.rootViewController = controller;

    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny];
    mediaPicker.delegate = self;
    mediaPicker.allowsPickingMultipleItems = YES;
    mediaPicker.prompt = @"Select songs to play";
    [_window.rootViewController presentViewController:mediaPicker animated:YES completion:^{
    }];

    return YES;
}


-(void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    NSLog(@"Result:%d", result);
    [controller dismissViewControllerAnimated:YES completion:nil];
}


-(void) mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
    [mediaPicker dismissViewControllerAnimated:YES completion:^{
        NSArray *recipents = @[@"a@b.com"];

        MFMailComposeViewController *messageController = [[MFMailComposeViewController alloc] init];
        messageController.mailComposeDelegate = self;
        [messageController setToRecipients:recipents];
        [messageController setMessageBody:@"Here is a music track" isHTML:NO];
        [messageController setSubject:@"Music"];

        NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];

        for (MPMediaItem *item in mediaItemCollection.items)
        {
            NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
            AVAsset *asset = [AVAsset assetWithURL:url];
            NSArray *presets = [AVAssetExportSession exportPresetsCompatibleWithAsset:asset];
            AVAssetExportSession *session = [AVAssetExportSession exportSessionWithAsset:asset presetName:presets[0]];
            session.outputURL = [[tmpDirURL URLByAppendingPathComponent:@"item"] URLByAppendingPathExtension:@"m4a"];
            session.outputFileType = [session supportedFileTypes][0];
            [session exportAsynchronouslyWithCompletionHandler:^{
                NSData *data = [NSData dataWithContentsOfURL:session.outputURL];
                [messageController addAttachmentData:data mimeType:@"audio/mp4" fileName:@"musicAttachment.m4a"];
            }];
        }
        [_window.rootViewController presentViewController:messageController animated:YES completion:^{
        }];
    }];

}

-(void) mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker
{

}

@end

【讨论】:

  • 不错的答案!单击它时,我正在尝试直接发送单曲。我尝试删除 [mediaPicker dismissViewControllerAnimated:YES completion:^{ }]; 但这无济于事。当我选择一首歌曲时,我得到一个灰色的行。知道如何实现这一目标吗?
  • 您的意思是您尝试在不使用邮件编辑器的情况下发送电子邮件?
  • 不,但是当我点击它时我试图只发送一首歌曲,换句话说,我想在我选择歌曲时显示邮件作曲家。
  • 您现在是否将其用作 SSCCE?还是与您自己的代码集成?
  • 我用 uiviewcontroller 创建了一个简单的项目,并让它直接加载选择器。
猜你喜欢
  • 2012-10-24
  • 2012-01-07
  • 2012-04-27
  • 2016-07-04
  • 2018-09-19
  • 2021-03-23
  • 2017-05-16
  • 2011-07-14
相关资源
最近更新 更多