1

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

我必须录制和播放音频,所以我使用媒体和文件插件,但我无法让它在 iOS 上运行。

我的步骤:

1)

我检测平台(Android 或 iOS)。

如果是Android,不需要设置任何东西,它可以工作。

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

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

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)创建文件后,我使用 Media 构造函数创建录制的文件:

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”,我有文件创建的回调('ok file created'),但 Media 构造函数无法访问该文件并返回错误:

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

我已经检查过 ipad 麦克风,它已为此应用程序激活。我相信它在 ipad(现在的 iOS 9.3.2)上的 iOS 更新之前有效,但我不确定了。是我做错了什么,还是有新的处理方法?

谢谢 !

4

1 回答 1

0

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

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

请记住,假设库文件夹位于 www 文件夹内,则给出 url 并且如下所示

这个问题从 ios9 开始就存在

于 2016-06-06T13:07:30.233 回答