我正在使用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更新之前有效,但我不确定了。 有什么我做错了,还是有新的方式来处理?
谢谢!
答案 0 :(得分:0)
你必须包括cdvfile:// localhost / library-nosync / with / Library / NoCloud
即cdvfile:// localhost / library-nosync //必须在url sorce中提供Library / NoCloud
请记住,假设库文件夹位于www文件夹中,并且跟随
,则会给出网址这个问题来自ios9和之后的