Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法通过“导出音频文件”;在“中打开”;来自语音备忘录应用程序_Ios_Iphone - Fatal编程技术网

Ios 无法通过“导出音频文件”;在“中打开”;来自语音备忘录应用程序

Ios 无法通过“导出音频文件”;在“中打开”;来自语音备忘录应用程序,ios,iphone,Ios,Iphone,我的应用程序高度依赖可以从其他应用程序导出到我的应用程序中的音频文件。 我的目标“信息”窗格中的“文档类型”配置为通过“打开位置:”从另一个应用程序的共享选项接受和导入3种不同类型的音频文件(mp3、m4a和aac)。 将音频从Mail或Dropbox导出到我的应用程序中是可行的,但语音备忘录甚至iMessage都拒绝将我的应用程序显示为共享选项 我发现通过Dropbox将语音备忘录中的音频导出到我的应用程序中是可行的。但这不是一个好方法,因为它应该直接起作用 有人知道怎么做才能让语音备忘录的音

我的应用程序高度依赖可以从其他应用程序导出到我的应用程序中的音频文件。 我的目标“信息”窗格中的“文档类型”配置为通过“打开位置:”从另一个应用程序的共享选项接受和导入3种不同类型的音频文件(mp3、m4a和aac)。 将音频从Mail或Dropbox导出到我的应用程序中是可行的,但语音备忘录甚至iMessage都拒绝将我的应用程序显示为共享选项

我发现通过Dropbox将语音备忘录中的音频导出到我的应用程序中是可行的。但这不是一个好方法,因为它应该直接起作用

有人知道怎么做才能让语音备忘录的音频输出正常工作吗


提前感谢您,Paul不确定这是否对您有帮助,您可能需要创建一个脚本来自动复制到剪贴板的功能,但请看

当发送选择栏打开“更多”时,按“应用”可显示接受音频文件的应用程序列表。只需在列表中选择一个应用程序,即可将与发送屏幕关联的备忘录发送给它

请注意,“应用”单元格仅在发送单个备忘录时可见(更改“自动发送”设置时不可用)


也可以将备忘录中包含的音频复制到剪贴板。然后,另一个应用程序可以读取剪贴板的内容以导入音频。要将音频复制到剪贴板,请长按备忘录列表中备忘录的名称,然后按出现的“复制”按钮。如果“复制”按钮未出现,则可能是您试图复制的备忘录太大(您不应尝试复制超过30MB的备忘录)。

我确信,自发布此问题以来,已经发生了很多变化,但以下是我如何通过“复制到:”共享选项将音频文件从语音备忘录应用程序导出到我的应用程序

  • 在XCode中,在我的目标的信息面板下,我添加了
    com.apple.m4a audio
    文档类型,并将
    支持就地打开文档
    (设置为
    YES
    )添加到自定义iOS目标属性中(见下图)
  • 在我的
    AppDelegate
    中,我实现了
    应用程序(uApp:UIApplication,打开url:url,选项:[UIApplicationOpenUrlOptions:Any]=[:])->Bool
就这样。现在,在我的设备上的语音备忘录应用程序中,如果我按下备忘录上的“共享”按钮,我会在选项列表中看到“复制到[我的应用程序]”(可能需要通过最后一个选项“更多”启用它)

以下是目标信息面板中所需更改的图片:

以及一个示例,用于在按下“复制到[您的应用程序]”(将在您的
AppDelegate
中实现)后立即在您自己的应用程序中播放所选语音备忘录:

导入UIKit
@UIApplicationMain
类AppDelegate:UIResponder、UIApplicationLegate{
让发动机=AVAudioEngine()
让player=AVAudioPlayerNode()
func应用程序(application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptions:[UIApplicationLaunchOptions:任何]?)->Bool{
返回真值
}
func应用程序(uApp:UIApplication,打开url:url,选项:[uiApplicationOpenUrlOptions:Any]=[:])->Bool{
guard let copyURL=URL(字符串:“test.m4a”,relativeTo:FileManager.default.temporaryDirectory)else{
返回错误
}
引擎。连接(播放器)
engine.connect(播放器,收件人:engine.mainMixerNode,格式:nil)
做{
//将语音备忘录复制到此应用的临时目录
尝试FileManager.default.copyItem(位于:url,收件人:copyURL)
//从复制的文件创建可读的音频文件
let file=尝试使用AVAudioFile(forReading:copyURL)
//将文件“加载”到播放机中
scheduleFile(文件,at:nil,completionHandler:nil)
尝试AVAudioSession.sharedInstance().setActive(true)
试试引擎启动()
}抓住{
打印(错误)
返回错误
}
player.play()
返回真值
}
}
请注意,此代码仅用于说明语音备忘录的url已正确传播到应用程序,以及如何将文件复制到临时目录。从那里,您可能希望将其传递给适当的ViewController


编辑:更改代码以说明如何复制文件

我不知道为什么语音备忘的m4a文件无法导出到m4a处理应用程序,但您可以通过向应用程序添加共享扩展名,将应用程序添加到常用的应用程序集(消息、邮件、Slack)。您的用户需要点击“更多…”来启用它。您为我节省了大量时间。我只是通过将其加载到AVAudioPlayer并在应用程序数据模型中创建一个条目来使用它。