cordova-plugin-media录音功能的实现

之前没有想过写什么东西,这几天才学习cordova 用了一些插件,但是在某度搜索的回答你们都懂的 80%都是各种转帖,没找到什么实质性的东西。怕忘了这段代码 我就注册了一个帐号分享一下。希望能够帮助到我一样的新手。

功能是录音,然后本地通知时候,点击页面后自动播放录音。

最开始我选择了media-capture这个插件  比较丑但是基本可以完成录音功能。后来在一个人的博客中我看到了media插件 发现他比media-capture的插件更灵活一些,改用了这个

先cordova add插件 这个我不说了 命令一大堆,废话儿不说了 上码!!!

$("#alertAudio").on("touchstart",function(){
                 //实例化录音类
                 start();
                 //开始录音
                 mediaRec.startRecord();
                
                 //$("#test").html("开始录音");
                 });

var mediaRec;
function start(){
    //定义录音文件保存名称及位置
    global.alertAudio =new Date().getTime()+ "test.wav";
    //实例化录音类
    mediaRec = new Media(global.alertAudio,
                         // 录音执行函数
                         function() {
                         console.log("start():Audio Success");
                         },
                         // 录音失败执行函数
                         function(err) {
                         console.log("start():Audio Error: "+ err.code);
                         }
                         );
}

                });
  $("#alertAudio").on("touchmove",function(e){
                 //这里很关键,如果手势移动会执行另外一个操作,录音就会终止,所以此处需要禁止移动的默认操作。
                 e.preventDefault();
                
                 //date3 =new Date();
                 //$("#test").html("滑动了"+(date3.getTime()-date1.getTime())/1000);
                 });//为按钮绑定 touchend(手势离开)事件
  $("#alertAudio").on("touchend",function(){
                 //结束录音
                 mediaRec.stopRecord();
                 //释放系统底层的音频播放资源
                 mediaRec.release();
                 //需要播放的录音的路径
                
//                 //实例化录音类
                 mediaRec = new Media(global.alertAudio,
                                      // 成功操作
                                      function() {
                                      console.log("start():Audio Success");
                                      },
                                      // 失败操作
                                      function(err) {
                                      console.log("start():Audio Error: "+ err.code);
                                      }
                                      );
                 //在html中显示当前状态
                 //$("#test")音
                 mediaRec.play();
                      //upload to Server

                //获取录音文件上传到服务器
                 window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, nFileSystemSuccess, fail);
                 //在html中显示当前状态
                 //$("#test").append("--开始播放录音");
                
                 });

function nFileSystemSuccess(filesystem)
{

 //filesystem.root.nativeURL是录音文件的完整路径+我自定义的文件名称
   global.alertAudio=filesystem.root.nativeURL+global.alertAudio;
    var options = new FileUploadOptions();
   
    options.fileKey = "file";
   
    options.fileName = global.alertAudio.substr(global.alertAudio.lastIndexOf('/')+1);
    options.mimeType = "audio/wav";
    var params = new Object();
   
    params.strutsUploadsFileName = global.alertAudio.substr(global.alertAudio.lastIndexOf('/')+1);
    options.params = params;
    options.chunkedMode=false;
    var ft = new FileTransfer();
  // 上传到服务器
    ft.upload(global.alertAudio, global.host + '/uploadOther.do', winAudio, fail, options);
}

function winAudio(r){
    var dateObj = eval("(" + r.response + ")");

//返回文件的上传路径
    var  _url=global.host+dateObj.resUrl;

//下载到ios沙盒文件中
    localFile(_url);
}
function downloadPic(sourceUrl,targetUrl){
    var fileTransfer = new FileTransfer();
    var uri = encodeURI(sourceUrl);
    fileTransfer.download(
                          uri,targetUrl,function(entry){
                          global.alertAudio = "doc:/"+entry.fullPath;
                          },function(error){
                          console.log("下载网络图片出现错误");
                          });
}


function localFile(_url) {
    var _localFile = "file_mobile/caas.wav";//目标文件
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
                             //创建目录
                             fileSystem.root.getDirectory("file_mobile", {create:true},
                                                          function(fileEntry){ },
                                                          function(){  console.log("创建目录失败");});
                            
                           
                             //查找文件
                             fileSystem.root.getFile(_localFile, null, function(fileEntry){
                                                     //文件存在就直接显示 
                                                     global.alertAudio="documents:/"+fileEntry.fullPath;
                                                     }, function(){
                                                     //否则就到网络下载图片! 
                                                     fileSystem.root.getFile(_localFile, {create:true}, function(fileEntry){ 
                                                                             var targetURL = fileEntry.toURL(); 
                                                                             downloadPic(_url,targetURL);  
                                                                             },function(){ 
                                                                             alert('下载图片出错'); 
                                                                             });  
                                                     }); 
                            
                             }, function(evt){ 
                             console.log("加载文件系统出现错误"); 
                             });  

整体的代码就是这样, 思路就是先录音 录音文件生成以后,拿到生成的文件上传到服务器 然后在下载到本地,我的业务逻辑是这样,认为麻烦的可以剩去上传服务器步骤,我完全是为了以后扩展用的。这些代码其实网上都是有的 我要说的是大家注意我遇到的坑

1,录音文件生成在临时目录中 所以获取文件路径的时候要用LocalFileSystem.TEMPORARY

2 , 下载到沙盒中的时候,需要给文件路径  如果没有就要会创建文件,这块文件路径我们最好进入最里面文件创建一个文件,如果路径的上层文件没有就会报错, 所以要创建多层目录文件要用递归

3,播放时候的路径 按照我的代码 应该是new media("documents://文件名称"); 因为我打开应用程序的目录发现document首字母是大写的,不要管他 直接用小写ok

4,global.alertAudio是公共变量 我要最后复制给本地通知的声音路径 大家可以忽略不记。

 

转载于:https://my.oschina.net/u/2464254/blog/509413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值