我正在使用 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 更新之前有效,但我不确定了。是我做错了什么,还是有新的处理方法?
谢谢 !