javascript - Cordova 在 ios9 上录制音频不起作用

标签 javascript html cordova audio ios9.3

我正在使用 Cordova 构建 html5/JS 应用程序。

我必须录制和播放音频,因此我使用媒体和文件插件,但我无法使其在 iOS 上运行。

我的步骤:

1)

我检测平台(Android 或 iOS)。

如果是Android,不需要设置任何东西,就可以了。

如果是 Ios,我将文件 URI 设置为“../Library/NoCloud/”(阅读 Raymond Camden article 后),

然后我在录制之前创建文件:

var mediaBaseUrl = '';
if(app.isIOS){
            mediaBaseUrl ='../Library/NoCloud/';
            createFileSystem();
}

我的createFile函数是:

createFileSystem : function(){
        var fileName= mediaBaseUrl+[myFileName];

        //asking for a new space
        window.requestFileSystem(
            LocalFileSystem.PERSISTENT, 
            0, 

            //success 
            function(fileSystem){

                fileSystem.root.getFile(

                    fileName, 
                    { create: true, exclusive: false },

                    //success callback
                    function(){
                        console.log('ok file created');
                    }, 
                    null
                );
            },

            // error
            function() {
                console.log("***log: failed in creating media file in requestFileSystem");
            }
        );
    },

2)创建文件后,我使用媒体构造函数创建录制的文件:

var recordedFile = new Media(
                mediaBaseUrl + [myFileName], 

                // success callback 
                function () {},

                // error callback
                function (err) {
                    console.log("recorded file error " );
                    console.log(err)
                }
            );

3) 在配置 XML 中,我将此行记录在 iOS 库文件夹中,并且没有保存在云中:

  <preference name="iosPersistentFileLocation" value="Library" />
  <preference name="BackupWebStorage" value="none" />

我的问题:

在 Android 设备上,一切都很好,我可以录制然后收听音频文件。

但是在 iOS 设备(ipad2)上,有些事情很奇怪:

  • 使用我的文件名“../Library/NoCloud/myFileName”,我没有成功回调 fileSystem.root.getFile 函数,但我可以在我的 ipad 中看到一个具有良好名称和良好位置的文件Library/NoCloud 文件夹,除非文件为空。因此 Media 构造函数无法播放该文件并返回错误。

  • 如果我将 myFileName 设置为“myFileName”,我会收到文件创建的回调(“确定文件已创建”),但 Media 构造函数无法访问该文件并返回错误:

    message: "Cannot use audio file from resource 'test.wav'", code: 1
    

我已检查 ipad 麦克风,它已针对此应用程序激活。我相信它在 ipad 上的 iOS 更新之前有效(现在是 iOS 9.3.2),btu 我不再确定了。 我是否做错了什么,或者有新的处理方法吗?

谢谢!

最佳答案

您必须将 cdvfile://localhost/library-nosync/包含在/Library/NoCloud

即 cdvfile://localhost/library-nosync//Library/NoCloud 必须在 url 源中给出

记住给出的 url 假设库文件夹位于 www 文件夹内,并且它遵循

这个问题从ios9开始就存在

关于javascript - Cordova 在 ios9 上录制音频不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344144/

相关文章:

javascript - Canvas 上漂亮的椭圆?

javascript - Jade 模板 : Make an image a link

javascript - 如何在JS中实现一条链?

javascript - 如何删除div元素下方的空格

javascript - Node Webkit-通过 outlook 打开和发送电子邮件

javascript - AngularJS 中的 Ng-view 不起作用

html - 在加载视频之前将 Youtube 视频缩略图设置为背景图片

javascript - 第二次单击浏览器文件按钮时上传图像

android - 开发移动应用程序的 Phone-gap 有多难

javascript - Android window.orientation 在使用 JavaScript + Phonegap 启动时不正确