- 我们有一个记录音频,使用PhoneGap Media API的应用程序,在iOS的情况下,文件API。
- 当用户单击 Accept&上传按钮,应用程序将文件移至服务器,用于使用phonegap的file.filetransfer()方法。
- 与iOS合作,android不多。
- 当我将我的Android设备连接到计算机并以驱动器安装为驱动器时,我可以看到该文件在根部被创建。
- 创建音频文件后,我能够从存储在全局var
fullRecordPath
中的位置上播放文件,=recording.wav
- 当我尝试指向file.filetransfer()时,我会得到错误代码= 1,我知道找不到 file
代码处理 Accept&上传点击事件:
$('#btnAcceptUpload').live('tap',function () {
if(isIOS){
thisFileToUpload = fullRecordPath;
} else {
// thisFileToUpload = './'+fullRecordPath; //doesn't work
// thisFileToUpload = 'file:///'+fullRecordPath; //doesn't work
thisFileToUpload = fullRecordPath; //doesn't work
}
var options = new FileUploadOptions();
msg = '';
options.fileKey="file";
msg += "options.fileKey = "+options.fileKey+"n";
options.fileName=thisFileToUpload.substr(thisFileToUpload.lastIndexOf('/')+1);
msg += "options.fileName = "+options.fileName+"n";
options.mimeType='audio/wav';
options.chunkedMode = false;
msg += "options.mimeType = "+options.mimeType+"n";
msg += "thisFileToUpload = "+thisFileToUpload;
alert(msg);
var ft = new FileTransfer();
ft.upload(thisFileToUpload, "http://10.0.17.121/~email/ttmovefiles.php", fileUploadSuccess, fileUploadFailure, options);
});
成功回调:
function fileUploadSuccess(r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
alert(r.response);
}
失败回调:
function fileUploadFailure(error){
alert("An error has occurred: Code = " + error.code);
}
感谢您的查看。
好吧,好的。我想出了这个。我保证我会稍后再仔细地拧紧并收紧它,但想记录下来,所以我可能会结束帮助另一个。
- 在iOS中创建您别无选择的新媒体,您必须使用文件API。文件系统中相同的完全合格的位置已移至相同的全局var。
- 不确定为什么它是这样工作的,但是使用Android,Media.play()不喜欢完全合格的路径。它只是想要文件名,显然是从根部搜索的。
- file.filetransfer.upload()总是希望资产的完全合格的路径上传,无论iOS或Android。
使这项工作:
我使用文件API创建了音频媒体然后用来将录音转移到的文件。我设置了2个全局var:一个用于在设备fullRecordPath
上播放音频,另一个用于上传fullUploadPath
。
这是创建文件的功能,调用媒体API并设置Android想要的全局var:
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
fileSystem.root.getFile(recordFileName, {
create: true,
exclusive: false
}, function(fileEntry){
alert("---------> Android File " + recordFileName + " created at " + fileEntry.fullPath);
fullRecordPath = recordFileName;
fullUploadPath = fileEntry.fullPath;
mediaVar = new Media(recordFileName, function(){
alert("Android media created successfully");
}, androidMediaCreateFailure, mediaStatusCallback); //of new Media
onMediaCreated();
}, androidMediaCreateFailure); //of getFile
}, androidMediaCreateFailure); //of requestFileSystem
这是播放该媒体的代码
function playAudio() {
var my_media = new Media(fullRecordPath,
// success callback
function () {
console.log("playAudio():Audio Success");
},
// error callback
function (err) {
console.log("playAudio():Audio Error: " + err.code);
exposeObject(err);
});
my_media.play();
}
这是上传的代码
$('#btnAcceptUpload').live('tap',function () {
if(isIOS){
thisfullUploadPath = fullRecordPath;
} else {
thisfullUploadPath = fullUploadPath;
}
var options = new FileUploadOptions();
msg = '';
options.fileKey="file";
msg += "options.fileKey = "+options.fileKey+"n";
options.fileName=thisfullUploadPath.substr(thisfullUploadPath.lastIndexOf('/')+1);
msg += "options.fileName = "+options.fileName+"n";
options.mimeType='audio/wav';
options.chunkedMode = false;
msg += "options.mimeType = "+options.mimeType+"n";
msg += "thisfullUploadPath = "+thisfullUploadPath;
alert(msg);
var ft = new FileTransfer();
ft.upload(thisfullUploadPath, "http://10.0.17.121/~email/ttmovefiles.php", fileUploadSuccess, fileUploadFailure, options);
});
在Android上您需要解析filesystem
window.resolveLocalFileSystemURI(FILEURI, function(msg){
// success call msg.fullPath
}, function(){
// FAIL
});