ios - 具有备用文件名的 UIActivityViewController?

标签 ios iphone uiactivityviewcontroller mfmessagecomposeviewcontroller uiactivity

我正在通过 UIActivityViewController 共享录音。当音频文件通过电子邮件或 iMessage 共享时,它会显示音频文件的基本名称,无需任何明显的更改方式。

NSArray *activityItems = [NSArray arrayWithObjects:self.audioPlayer.url, nil];

UIActivityViewController *avc = [[UIActivityViewController alloc]
                                 initWithActivityItems:activityItems
                                 applicationActivities:nil];
[self presentViewController:avc
                   animated:YES completion:nil];

如果我不使用 UIActivityViewController 而只是直接使用 MFMessageComposeViewController,那么我可以使用

[composer addAttachmentURL:self.audioPlayer.url withAlternateFilename:@"Piano Song.m4a"];

是否可以使用 UIActivityViewController 的备用文件名?

最佳答案

您可以在临时目录中使用您想要的任何名称创建到文件的硬链接(hard link)(这样您就不必复制实际文件)并将其传递给 UIActivityViewController 而不是文件。

- (NSURL *)createLinkToFileAtURL:(NSURL *)fileURL withName:(NSString *)fileName {
    NSFileManager *fileManager = [NSFileManager defaultManager];

    // create a path in the temp directory with the fileName
    NSURL *tempDirectoryURL = [[NSFileManager defaultManager] temporaryDirectory];
    NSURL *linkURL = [tempDirectoryURL URLByAppendingPathComponent:fileName];

    // if the link already exists, delete it
    if ([fileManager fileExistsAtPath:linkURL.path]) {
        NSError *error;
        [fileManager removeItemAtURL:linkURL error:&error];
        if (error) {
            // handle the error
        }
    }

    // create a link to the file
    NSError *error;
    BOOL flag = [fileManager linkItemAtURL:fileURL toURL:linkURL error:&error];
    if (!flag || error) {
        // handle the error
    }
    return linkURL;
}

像这样使用它:

NSURL *fileURL = ...;
NSString *desiredName = ...;

NSURL *linkURL = [self createLinkToFileAtURL:fileURL withName:desiredName];
UIActivityViewController *viewController = [[UIActivityViewController alloc] initWithActivityItems:@[linkURL] applicationActivities:nil];
[self presentViewController:viewController animated:YES completion:nil];

希望对您有所帮助!祝你好运!

关于ios - 具有备用文件名的 UIActivityViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959642/

相关文章:

ios - 字典响应错误

iphone - Objective C 在自动释放对象上泄漏内存

ios - ios-charts组合图表:条形图经过图表的右轴

iphone - 将 iPhone 应用程序安装到 iPhone

iphone - "Incorrect signature"来自 FBVideoUpload 请求

ios - 通过 AirDrop 共享的文件不完整

ios - 如何在 iOS Swift 中与 UIActivityViewController 共享的 WhatsApp 中设置不同的参数?

swift - UIActivityviewcontroller 中的文本不可编辑

ios - 定时器选择器中具有完成功能的函数

ios - 如何在 Swift3 中使用 YouTube API 显示 YouTube channel 的播放列表