EA&UML日拱一卒-微信小程序实战:位置闹铃 (12)-这还不算完

因为重构代码,多花了一点时间,久等了。。


上一篇文章实现了音频文件缓存功能,做到了一次下载多次播放。但是还有一个问题:这个功能是作为app的一个功能而存在,如果想在其他场合使用就必须是代码层次的拷贝和粘贴。不好。


我们继续改进,将这部分功能做成一个通用,独立模块。


voiceplay.js


//voice player

function prepare(){

 var that = this

 var info_pair = wx.getStorageSync('url2FileMap') || [];

 this.urlMap = new Map();

 info_pair.forEach(function(pair){

   that.urlMap.set(pair.url, pair.file);

 });

}


function saveMap(){

 var info_pair = []

 this.urlMap.forEach(function(file, url, map){

   info_pair.push({url:url, file:file})

 });

 wx.setStorageSync('url2FileMap', info_pair);

}


 //播放铃声文件,优先使用缓存文件,根据需要下载。

 //var url = that.getRingtoneUrl(index)

function play(url) {

 const app = getApp()

 var that = this

 var savedFile = this.urlMap.get(url)

 if (savedFile != undefined) {

   //已经存在缓存文件,直接播放缓存文件

   app.addLog('播放缓存铃声')

   wx.playVoice({

     filePath: savedFile,

     fail: function () {

       //播放缓存文件失败,清除缓存文件信息

       that.urlMap.delete(url);

       that.saveMap();

       //下载并播放缓存文件

       that.downloadAndPlay(url)

     },

   })

 } else {

   //没有缓存文件,下载并播放

   app.addLog('that.downloadAndPlay')

   that.downloadAndPlay(url)

 }

}


 //下载,保存,播放铃声文件。

function downloadAndPlay(url) {

  const app = getApp()

   var that = this

   that.downloadFile({

     url: url,

     success: function (savedFilePath) {

       app.addLog('saveFileSuccess')

       //下载成功,播放文件

       app.addLog('播放下载铃声')

       wx.playVoice({

         filePath: savedFilePath,

       })

       //更新缓存文件信息。

       that.urlMap.set(url,savedFilePath);

       that.saveMap();

     }

   })

 }


 //下载并保存文件

 function downloadFile(parameter) {

   const app = getApp()

   var that = this

   wx.downloadFile({

     url: parameter.url,

     success: function (res) {

       //保存临时文件,以供将来使用

       wx.saveFile({

         tempFilePath: res.tempFilePath,

         success: function (save_res) {

           parameter.success(save_res.savedFilePath)

         }

       })

     },

   })

 }


module.exports = {

 prepare: prepare,

 play: play,

 downloadAndPlay:downloadAndPlay,

 downloadFile:downloadFile,

 saveMap:saveMap

}


用法


经过上述处理,我们就得到了一个通用的音频播放模块,可以在直接在其他小程序中使用。一共分三步,每步就一行。


导入模块


const voiceplayer = require('./utils/voiceplayer.js')


目录有可能需要根据目录结构修改。


初始化


voiceplayer.prepare()


调用prepare函数,取得已经保存的缓存文件信息。


播放音频


voiceplayer.play(media_file_url)


调用play函数,播放指定的音频文件。如果没有缓存文件则首先下载该文件播放并保存以供下次使用。音频文件需要另外准备。


代码下载链接


voiceplayer.js


https://raw.githubusercontent.com/xueweiguo/alarmmap/master/utils/voiceplayer.js


写在文章的最后


既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。本公众号的成长需要您的支持!
以上就是今天的文章,欢迎点赞并推荐给您的朋友!

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】
微信小程序Demo-闹钟应用-附整源代码.rar 资源介绍 本资源是一个基于微信小程序开发的闹钟应用示例,包含了整的源代码,方便用户进行二次开发和定制。该闹钟应用具有简洁的界面设计和实用的功能,可以满足用户的常需求。 一、功能特点: 1. 闹钟设置:用户可以自由设置多个闹钟,包括闹钟时间、重复周期(如每天、每周等)以及闹钟铃声。 2. 闹钟提醒:当闹钟时间到达时,应用会发出声音和振动提醒,确保用户不会错过重要事项。 3. 闹钟编辑与删除:用户可以随时查看、编辑或删除已设置的闹钟。 4. 闹钟状态显示:应用会在主界面展示当前已设置的闹钟列表,以及每个闹钟的状态(开启/关闭)。 5. 天气信息:应用集成了天气查询功能,用户可以在闹钟设置界面查看实时天气信息,方便规划出行。 二、技术实现: 1. 使用微信小程序原生框架进行开发,兼容性强,易于维护。 2. 采用云开发模式,简化了服务器端的搭建和部署过程。 3. 闹钟提醒功能采用微信小程序的本地推送(wx.setStorageSync)和定时器(setTimeout)实现。 4. 天气信息通过调用第三方API获取,保证了数据的实时性和准确性。 三、二次开发与定制: 1. 本资源提供了整的源代码,用户可以根据自己的需求进行修改和扩展。 2. 用户可以自定义闹钟应用的界面风格、功能模块等,打造个性化的闹钟应用。 3. 源代码结构清晰,注释详细,便于用户理解和修改。 总之,本资源提供了一个功能善、易于定制的微信小程序闹钟应用示例,适合广大开发者学习和参考。通过二次开发和定制,您可以轻松打造出属于自己的独特闹钟应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值