最近做中软杯遇到一个严峻的问题,语音聊天,因为开发模式为hybird,另外由于能力有限只能利用phonegap提供的插件。
开始解决这个问题的时候,有两种选择,一种为是利用Capture,即调用本机的录音机功能,第二种是利用Media进行录制,后者应该可以实现较好的语音聊天功能(但事实并不能)
Media方式可以参照点击打开链接。主要遇到的问题有两个:1、找不到指定的文件,按照它给的源码应该是存在根目录下,但上传文件时并没有找到2、在根目录下录得的文件无法播放(一秒一秒的?) 自己测试的源码删掉了- - 若此篇有幸被大神看到,希望能帮忙解决media的录音上传问题,感激不尽。
虽然Capture采集的这种方式。。怎么说,有点low,但有一个好处,就是自己不用写界面了啊。。。系统是啥样就是啥样。
本人采用控制台给项目添加插件的方式 在对应项目下添加 cordova plugin add org.apache.cordova.media-capture
以下是录音实现的具体代码,当然包括了上传
changeFooterToVoice: function () {
$("#pgTalk .voice").unbind("click").bind("click", function () {
navigator.device.capture.captureAudio(captureSuccess, captureError, { limit: 1,mode });
function captureSuccess(mediaFiles) {
uploadFile(mediaFiles[0]);
}
// 采集操作出错后的回调函数
function captureError(error) {
var msg = 'An error occurred during capture: ' + error.code;
navigator.notification.alert(msg, null, 'Uh oh!');
}
function uploadFile(mediaFile) {
var ft = new FileTransfer(),
path = mediaFile.fullPath,
name = mediaFile.name;
var options = new FileUploadOptions();
var params = new Object();
params.SendId = AppData.UserId;
params.RecieveId = aFriendContact.FriendId;
params.name = mediaFile.name;
options.params = params;
ft.upload(path,
AppData.ServiceUrl + "servlet/SendVoice",
function (result) {
console.log('Upload success: ' + result.responseCode);
console.log(result.bytesSent + ' bytes sent');
},
function (error) {
console.log('Error uploading file ' + path + ': ' + error.code);
},options);
}
});
$("#pgTalk .foot-text-table").css('display','none');
$("#pgTalk .foot-voice-table").css('display','');
}
上传用到File-transfer这个插件 在对应项目下添加 cordova plugin add org.apache.cordova.file-transfer 这些插件的具体用法都可以参照上面的链接
没有过多的注释就不要吐槽了。。
上传过后的文件一般是wav或者amr(什么鬼格式。。。)
从服务器上下下来的amr格式文件用HTML5的audio标签并没有办法播放,因此机智的我的组长(学长)把这该死的amr转为mp3格式,最后成功解决了!
如果不知道怎么转:)百度就好了。做完这个功能之后我们得出一个结论,java什么不能干:)(目前的水平)