<!DOCTYPE html> <html lang="en"> <head> <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" id="viewport" name="viewport"> <meta charset="utf-8"> <title></title> <script type="text/javascript" src="./js/jquery-1.11.1.js"></script> <script type="text/javascript" src="./js/jQuery.md5.js"></script> <script language="javascript" src="./js/cordova.js" > </script> </head> <body> <div class="app"> <h1>Apache Cordova</h1> <div id="deviceready" class="blink"> <p id="test">操作提示</p><!--这里会显示录音操作中的各个变化--> <input type="button" value="录音" id="luyin" /> <input type="button" value="录音完成" id="luyin_finish" /> <input type="button" value="录音播放" id="luyin_bofang" /> <input type="button" value="录音上传 " id="luyin_upload" /> </div> </div> <script type="text/javascript"> var mediaRec; var recTimeMax = 10; var recTime = 0; var recordFile = "myrecording.amr"; //开始录音 function recordAudio() { var src = recordFile; mediaRec = new Media(src, onSuccess, onError); // Record audio mediaRec.startRecord(); // Stop recording after 10 sec recTime = 0; var recInterval = setInterval(function() { recTime = recTime + 1; if (recTime >= recTimeMax) { clearInterval(recInterval); mediaRec.stopRecord(); mediaRec.release(); } }, 1000); } // onSuccess Callback // function onSuccess() { console.log("recordAudio():Audio Success"); } // onError Callback // function onError(error) { alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); } //========== //录音完成 function recordFinish() { recTime = recTimeMax; } //播放audio function playAudio(url) { // Play the audio file at url var my_media = new Media(url, // success callback function() { console.log("playAudio():Audio Success"); }, // error callback function(err) { console.log("playAudio():Audio Error: "+err); }); // Play audio my_media.play(); } //\\ //上传 function uloadRecord(){ var win = function (r) { console.log("Code = " + r.responseCode); console.log("Response = " + r.response); console.log("Sent = " + r.bytesSent); } var fail = function (error) { alert("An error has occurred: Code = " + error.code); console.log("upload error source " + error.source); console.log("upload error target " + error.target); } var options = new FileUploadOptions(); options.fileKey = "file"; options.fileName = recordFile; options.mimeType = "audio/wav"; var ft = new FileTransfer(); ft.upload('/sdcard/'+recordFile, encodeURI("http://192.168.1.101/upload_record/index.php"), win, fail, options); } //为按钮绑定 touchstart(点击) 事件 $("#luyin").click(function(){ //实例化录音类 recordAudio(); //开始录音 $("#test").html("开始录音"); }); //录音 完成 $('#luyin_finish').click(function(){ recordFinish(); }); //录音 播放 $('#luyin_bofang').click(function(){ playAudio(recordFile); }); //录音 上传 $('#luyin_upload').click(function(){ uloadRecord() }); </script> </body> </html>
upload.php
<?php // Where the file is going to be placed $target_path = "records/"; /* Add the original filename to our target path. Result is "uploads/filename.extension" */ $target_path = $target_path . basename( $_FILES['file']['name']); if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['file']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; echo "filename: " . basename( $_FILES['file']['name']); echo "target_path: " .$target_path; } ?>
manifest 的权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
附件 是 2.91 版本的 js 和 jar
*** 解决 android 录音 在 ios 不能播放的问题,
android 录音格式 改为 mp3
修改 cordova media 插件源码
android/java/org.apache.cordova/media/AudioPlayer
修改 startRecording 方法
this.recorder.setAudioSource(MediaRecorder.AudioSource.MIC); this.recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); this.recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
这样就可以了, 亚达\(^o^)/~