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

时间:2016-05-20 10:20:47

标签: javascript html5 cordova audio ios9.3

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

我必须录制和播放音频,所以我使用Media&文件插件,但我有问题使它在iOS上运行。

我的步骤:

1)

我检测平台(Android或iOS)。

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

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

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

<!DOCTYPE html>
<html ng-app="signApp">
<head>

</head>
<body ng-controller="signCtrl">    

    <form  ng-submit="regForm()">
      <br> user name:
      <input type="text" ng-model="user.name">
      <br>
      <br> password:
      <input type="text" ng-model="user.password">
      <br>    
      <input type="submit" value="Submit">
    </form>

</body>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>  
<script src="/controller/test.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.min.js"></script>
</html>

我的createFile函数是:

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

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

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");
            }
        );
    },

3)在配置XML中,我要在iOS库文件夹中记录此行,而不在云中保存:

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

                // success callback 
                function () {},

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

我的问题:

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

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

  • 使用我的文件名&#34; ../ Library / NoCloud / myFileName&#34;,我没有成功回调fileSystem.root.getFile函数,但是我可以看到一个名字好的文件和我的ipad Library / NoCloud文件夹中的好地方,除了文件为空。因此Media构造函数无法播放该文件并返回错误。

  • 如果我将myFileName设置为&#34; myFileName&#34;,我有文件创建的回调(&#39; ok文件已创建&#39;),但Media构造函数无法访问该文件返回错误:

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

你必须包括cdvfile:// localhost / library-nosync / with / Library / NoCloud

即cdvfile:// localhost / library-nosync //必须在url sorce中提供Library / NoCloud

请记住,假设库文件夹位于www文件夹中,并且跟随

,则会给出网址

这个问题来自ios9和之后的