我正在使用 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/