Cordova开发app——使用插件录音并上传服务器
Cordova开发App,语音消息功能开发,调用手机麦克风录音。
本文主要使用到的主要插件有一下三个:
插件的github地址:
- cordova-plugin-media
- cordova-plugin-file
- cordova-plugin-file-transfer还用到一个辅助插件(忘了是不是构建Cordova项目的时候会自动安装的!尴尬)
1
2
3
41、cordova-plugin-media //录音并生成音频文件
2、cordova-plugin-file // 对本地文件进行读写操作
3、cordova-plugin-file-transfer // 上传文件到服务器
1 | cordova-plugin-device // 获取设备信息 |
由于我需要把文件存到手机中,Android和ios的文件有所不同,所以需要用到这个device插件来判断app安装的平台
1
2
3
4
5
6if (device.platform ** "iOS") {
this.filePath = cordova.file.tempDirectory;
} else if (device.platform ** "Android") {
this.filePath = cordova.file.externalRootDirectory;
}
下面分别写下这几个插件在从录音到上传完成的用法。
使用插件前,需要先全局监听deviceready方法,
1 | document.addEventListener("deviceready", onDeviceReady, false); |
cordova-plugin-media的基本用法
首先需要创建一个媒体对象:
1 | var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]); |
上面的src在ios和安卓中有些区别,需要注意下!!:
- 在ios中只支持录制.wav的音频格式,如果src是.mp3、.m4a或者其他格式会无法录制而出错;
- 在Android中则可以使用mp3、wav、m4a等等格式(安卓支持的格式比较多,具体请自己百度或者自己尝试~)
- 在ios中,src只需要用文件名即可否则会报错(不需要this.filePath,只需要this.fileName),Android中如果你自定义了文件存储的位置,则需要写全文件的路径(即需要加上this.filePath)
- 综上,如果只开发在安卓上使用的app,格式随意;如果要支持安卓和ios,建议使用wav(据说生成的音频文件比较大,我项目中只需要录制1分钟以内的音频,所以没哟用其他插件,github上有其他大神提供的其他插件来支持两个平台,同时录制的音频文件也比较小,欢迎自行尝试)
由于我项目中播放音频文件直接只用的html5的audio标签,没有使用插件提供的一些播放、暂停等方法,所以有需要使用插件提供方法的的同学请查看文章顶部的GitHub地址
cordova-plugin-file 的基本用法
此插件用来吧文件写到本地
安装好此插件后(非必须)应该在项目根目录的config.xml中配置下文件保存的位置,如果不自己配置,将会使用插件的默认配置
安卓的配置(选择两个中的一个就好)
1 | <preference name="AndroidPersistentFileLocation" value="Internal" /> |
ios的配置(选择两个中的一个就好)
1 | //在iOS设备上有两个存储持久性文件的有效位置:Documents目录和Library目录。如果存到Documents目录中,会在iTunes中显示所有应用程序的文件; |
向设备中写入文件:
1 | // this.filePath是指设备存储的根目录,ios和安卓有所不同,文章前面已经设置,下面的代码会在设备目录下创建: /weliao/voice的文件路径 |
读取之前写入的文件:
1 | // audioFile是指之前写入的文件所在的路径(包含文件名),如:XXX/weiliao/voice/XXX.wav |
cordova-plugin-file-transfer的基本用法
本插件主要是用来上传文件到服务器,由于上一个插件读取文件获得数据格式可能和普通input读取文件的格式有些不同,导致我使用普通的ajax上传文件老是失败,在使用这个插件后上产成功了;具体失败原因还未知。。。有知道的还望
该插件用在读取文件成功之后~
1 | function uploadFileFn(file){ |