1.网络Api
微信小程序处理的数据通常从后台服务器获取,再将处理过的结果保存到后台服务器,这就要求微信小程序要有与后台进行交互的能力。微信原生Api接口或第三方Api提供了各类接口实现后端交互。
1.1发起网络请求
示例效果截图
通过POST方法获取邮政编码对应的地址信息
.wxml代码:
<view>邮政编码:</view>
<input type="text"bindinput="input" placeholder="6位邮政编码"/>
<button type="primary" bindtap="find">查询</button>
<block wx:for="{{address}}">
<block wx:for="{{item}}">
<text>{{item}}</text></block>
</block>
.js代码:
Page({
data:{
postcode:"",
address:[],
errMsg:"",
error_code:-1
},
input:function(e){
this.setData({
postcode:e.detail.value,
})
console.log(e.detail.value)
},
find:function(){
var postcode=this.data.postcode;
if(postcode!=null&&postcode!=""){
var self=this;
wx:wx.showToast({
title: '正在查询,请稍候....',
duration: 10000,
icon: 'loading',
});
wx.request({
url: 'https://v.juhe.cn/postcode/query',
data:{
'postcode':postcode,
'key':'0ff9bfccdf147476e067de994eb5496e'
},
header:{
'Conten-Type':'application/json',
},
method:'GET',
success:function(res){
wx.hideToast();
if(res.data.error_code==0){
console.log(res);
self.setData({
errMsg:"",
error_code:res.data.error_code,
address:res.data.result.list
})
}
else{
self.setData({
errMsg:res.data.reason || rees.data.reason,
error_code:res.data.error_code
})
}
}
})
}
}
})
运行截图:
2.多媒体API
多媒体API主要包括图片API、录音API、音频播放控制API、音乐播放控制器API等、其目的是丰富小程序的页面功能。
2.1图片API
图品API实现对相机拍照图片或本地相册图片进行处理。
示例代码:
wx.chooseImage({
count:2,//默认值为2
sizeType:['original','compressed'], //可以指定原图还是压缩图,默认二者都有
sourcrType:['album','camera'],//可以指定来源是相机还是相册,默认二者都有
success:function(res){
//返回选定的照片的本地路径列表,tempFilePath可以作为img标签的src属性来显示图片、
var tempFilePath=res.tempFilePath
var temFiles=tempFiles;
console.log(tempFilePath)
console.log(tempFiles)
}
}
2.预览图片
示例代码:
wx.previewImage({
current:"http://bmobb-cdn-16488.b0.upaiyun.com/2018/02/05/2.png",
urls: ["http://bmobb-cdn-16488.b0.upaiyun.com/2018/02/05/1.png"],
"http://bmobb-cdn-16488.b0.upaiyun.com/2018/02/05/2.png",
"http://bmobb-cdn-16488.b0.upaiyun.com/2018/02/05/3.png"
})
3.获取图片信息
示例代码:
wx.chooseImage({
success:function(res){
wx.getImageInfo({
src:res.tempFilePaths[0],
success:function(e){
console.log(e.width)
console.log(e.height)
}
})
},
})
4.保存图片到系统相册
示例代码;
wx.chooseImage({
success:function(res){
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePaths[0],
success:function(e){
console.log(e)
}
})
},
})
2.2录音API
录音Api提供了语音录制的功能。
2.停止录音:
示例代码:
wx.startRecord)
({
success: function(res){
var tempFilePath= res.tempFilePath},
fail: function(res){
//录音失败
}
})
setTimeout(function(){//结束录音
wx.stopRecord()
},10000)
2.3音频播放控制API
音频播放控制API主要用于对语音媒体文件的控制,包括播放、暂停、停止及audio组件的控制。
1.播放语音
示例代码:
wx.startRecord({
success: function(res){
var tempFilePath= res.tempFilePath wx.playVoice({//录音完后立即播放
filePath:tempFilePath, complete:function(){
}
})
}
})
2.暂停播放
示例代码
wx.startRecord({
success: function(res){
var tempFilePath = res.tempFilePath
wx.playVoice({ filePath:tempFilePath
})
setTimeout(function(){
//暂停播放
wx.pauseVoice()},5000)
}
})
3.结束播放:
示例代码
wx.startRecord({
success: function(res){
var tempFilePath =res.tempFilePath wx.playVoice({
filePath:tempFilePath})
setTimeout(function(){
wx.stopVoice()},5000)
}
})
2.4音乐播放控制API
音乐播放控制API主要用于实现对背景音乐的控制,音乐文件只能是网络流媒体,不能是本地音乐文件。
案例展示:
.wxml代码;
<view class="container">
<image class="bgaudio" src="{{changedImg? music.coverImg:'../image/ae.jpg'}}"></image>
<view class="control-view">
<!-- 使用data-how定义一个0表示快退10秒 -->
<image src="../image/aq.jpg" bindtap="onPositionTap"data-how="0"></image>
<image src="../image/{{isPlaying?'pause':'aw'}}.jpg"bindtap="onAudioTap"></image>
<image src="../image/ay.jpg"bindtap="onStopTap"></image>
<!-- 使用data-how定义一个1表示快进10秒 -->
<image src="../image/ar.jpg" bindtap="onPositionTap"data-how="1"></image>
</view>
</view>
js代码:
Page({
data:{
//记录播放状态
isPlaying:false,
//记录coverImg,仅当音乐初始时播放和播放停止时,使用默认的图片。播放中和暂停时,都使用当前音乐的图片
coverImgchangedImg:false,
//音乐内容
music:{
"url":"/miniprogram/image/music.ncm",
// "url":"http://bmob-cdn-16488.bo.upaiyun.com/2018/02/09/117e4a1b405195b18061299e2de89597.mp3",
"title":"盛晓玫-有一天",
// "coverImg":
"coverImg":"/miniprogram/image/tu1.png"
// "http://bmob-cdn-16488.bo.upaiyun.com/2018/02/09/f604297140c9681880cc3d3e581f7724.jpg"
},
},
onLoad:function(){
//页面加载时,注册监听事件
this.onAudioState();
},
//点击播放或者暂停按钮时触发
onAudioTap:function(event){
if(this.data.isPlaying){
//如果在正常播放状态,就暂停,并修改播放状态
wx.pauseBackgroundAudio();
}else{
//如果在暂停状态就开始播放,并修改播放状态
let music=this.data.music;
wx.playBackgroundAudio({
dataUrl:music.url,
title:music.title,
coverImgUrl:music.coverImg
})
}
},
//点击即可停止音乐
onStopTap:function(){
let that =this;
wx.stopBackgroundAudio({
success:function(){
//改变coverImg和播放状态
that.setData({isPlaying:false,chengedImg:false});
}
})
},
//点击"快进10秒"或者是“快退10秒”时,触发
onPositionTap:function(event){
let how=event.target.dataset.how;
//获取音乐的播放状态
wx.getBackgroundAudioPlayerState({
success:function(res){
//仅在音乐播放中,快进快退才生效
//音乐的播放状态,1表示播放中
let status =res.ststus;
if(status ===1){
//音乐的总时长
let duration =res.duration;
//音乐播放的当前位置
let currentPosition=res.currentPosition;
if(how === "0"){
//注意:快退时,当前播放位置快退10秒小于0时,直接设置position为1,否则直接减去10秒
//快退到达的位置
let position =currentPosition-10;
if(position<0){
position=1;
}
//执行快退
wx.seekBackgroundAudio({
position: position,
});
//给一个友情提示,在实际应用中,请删除!!!
wx.showToast({title:"快退10秒",duration:500});
}
if(how === 1){
//注意:快进时,当前博发那个位置快进10秒后大于总时长,直接设置position为总时长减1
//到达快进位置
let position =currentPosition+10;
if(position>duration){
position=duration-1;
}
//执行快进
wx.seekBackgroundAudio({
position: position,
});
//给出友情提示,再实际应用中,请删除!!!
wx.showToast({
title: '快进10秒',
duration:500
});
}
}
else{
//给出一个友情提示,在实际应用中,请删除!!!
wx.showToast({
title: '音乐未播放',
duration:800
});
}
}
})
},
//音乐播放状态
onAudioState:function(){
let that=this;
wx.onBackgroundAudioPlay(function(){
//当wxwx.playBackgroundAudio()执行时触发
//改变coverImg和播放状态
that.setData({
isPlaying:true,changedImg:true
});
console.log("on play");
});
wx.onBackgroundAudioPlay(function(){
//当wx.onBackgroundAudioPlay()触发时
//仅改变播放状态
that.setData({isPlaying:false});
console,log("on pause");
});
wx.onBackgroundAudioStop(function(){
//当音乐自行结束播放时触发
//改变coverImg和播放状态
that.setData({isPlaying:false,changedImg:false});
console.log("on stop");
})
}
})
运行效果:
3.文件API
从网络上下载录音文件都是临时保存的,若要持久保存,需要用到文件API。文件API提供了打开、保存、删除等操作本地文件的能力,
1.保存文件
示例代码:
Page({
saveImg:function(){
wx.chooseImage({
count:1,
sizeType:['original','camera'],
success:function(res){
var tempFilePaths=res.tempFilePaths[0]
wx.saveFile({
success:function(res){
var saveFilePath=res.saveFilePath;
console.log(saveFilePath)
}
})
}
})
}
})
2.获取本地文件列表
示例代码:
wx.getSaveFileList({
success:function(res){
that.setData({
fileList:res.fileList
})
}
})
3.获取本地文件的文件信息
示例代码:
wx.chooseImage({
count:1,//默认值为9
sizeType:['original','compressed'],
sourceType:['album','camera'],
success:function(res){
var tempFilePaths=res.tempFilePaths[0]
wx.saveFile({
tempFilePath:tempFilePaths,
filePath:saveFilePath,
success:function(res){
var saveFilePath=res.saveFilePath;
wx.getSavedFileInfo({
filePath:saveFilePath,
success:function(res){
console.log(res.size)
}
})
}
})
}
})
打开文档 示例代码:
wx.downloadFile({
url:"/miniprogram/image/tu2.png",
success:function(res){
var tempFilePath=res.tempFilePath;
wx.openDocument({
filePath: tempFilePath,
success:function(res){
console.log("打开成功")
}
})
}
})
4.本地数据及缓存API
4.1保存数据
小程序提供了以键值对的形式进行本地数据缓存功能,并且是永久保存的,但最大不超过10mb,其目的是提高加载速度。数据缓存的接口主要有4个。
示例代码:
wx.setStrorage({
key:'name',
data:'sdy'
succcess:function(res){
console.log(red=s)
}
})
4.2获取数据
wx.getStorage(Object)接口是从本地缓存中异步获取指定Key对应的内容。
示例代码;
wx.setStorage({
key:'name',
data:'sdy',
success:function(res){
console.log(res)
}
})
4.3删除数据
wx. removeStorage(Object)接口用于从本地缓存中异步移除指定key。
实例代码:
wx.removeStorage({
key:'name',
success:function(res){
console.log("删除成功")},
fail:function(){
console.log("删除失败")
}
})
4.4清空数据
1.wx. clearStorage()接口用于异步清理本地数据缓存,没有参数。
示例代码:
wx.getStorage({
key:'name',
success:function(res){
wx.clearStorage()
},
})
2.wx. clearStroageSync()接口用于同步清理本地数据缓存。
try{
wx.clearStorageSync()
}catch(e){
}
5.位置信息API
小程序可以通过位置信息API来获取或显示本地位置信息,小程序支持WGS84和GCj02标准,WGS84标准为地球坐标系,是国际上通用的坐标系;GCj02标准是中国国家测绘局制定的地理信息系统的坐标系统,是由WGS84坐标系经加密后的坐标系,又称为火星坐标系。默认为WGS84标准,若要查看位置需要使用GCj02标准。主要包括以下3个API接口:
wx.getLocation(Object)接口用于获取位置信息。
wx.chooseLocation(Object)接口用于选择位置信息。
wx.openLocation(Object)接口用于通过地图显示位置。
5.1获取位置信息
wx.getLocation(Object)接口用于获取当前用户的地理位置、速度,需求用户开启定位功能,当用户离开小程序后,无法获取当前的地理位置及速度。
示例代码:
wx.getLocation({
type:'wgs84',
success:function(res) {
console.log("经度:"+res.longitude);
console.log("纬度:"+res.latitude);
console.log("速度:"+res.longitude);
console.log("位置的精确度:"+res.accuracy);
console.log("水平精确度:"+res.horizontalAccuracy);
console.log("垂直精确度:"+res.verticalAccuracy);
}
})
5.2选择位置信息
接口用于在打开的地图中选择位置,用户选择位置后可返回当前位置的名称、地址、经纬度信息。
示例代码:
wx.getLocation({
success:function(res) {
console.log("位置的名称"+res.name)
console.log("位置的地址"+res.address)
console.log("位置的经度:"+res.longitude);
console.log("位置的纬度:"+res.latitude);
}
})
5.3显示位置信息
wx. openLocation(Object)接口用于在微信内置地图中显示位置信息。
示例代码:
wx.getLocation({
type:'gcj02',
success:function(res) {
var latitude =res.latitude
var longitude=res.longitude
wx.getLocation({
latitude:latitude,
longitude:longitude,
scale:10,
name:'智慧国际酒店',
address:'西安市长安区西长安区300号'
})
}
})
6.设备相关API
设备相关的接口用于获取设备相关信息,主要包括系统信息、网络状态、拨打电话及扫码等。主要包括以下5个接口API:
■ wx.getSystemInfo(Object)接口、wx.getSystemInfoSync()接口 用于获取系统信息。
■ wx.getNetworkType(Object)接口 用于获取网络类型。
■ wx.onNetworkStatusChange(CallBack)接口 用于监测网络状态改变。
■ wx.makePhoneCall(Object)接口用于拨打电话。
6.1获取系统信息
wx. getSystemInfo(Object)接口、wx. getSystemInfoSync()接口分别用于异步和同步获取系统信息。
示例代码:
wx.getSystemInfo({
success:function(res) {
console.log("手机型号:"+res.model)
console.log("设备像素比:"+res.pixelRatio)
console.log("窗口的宽度:"+res.windowWidth)
console.log("窗口的长度:"+res.windowHeight)
console.log("微信的版本号:"+res.version)
console.log("操作系统版本:"+res.system)
console.log("客户端平台:"+res.platform)
},
})
6.2网络状态
1.获取网络状态
wx. getNetworkType(Object)用于获取网络类型。
如果wx. getNetworkType()接口被成功调用,则返回网络类型包,有wifi、2G、3G、4G、unknown(Android下不常见的网络类型)、none(无网络)。
示例代码如下:
wx.getNetworkType({
success:function(res) {
console.log(res.networkType)
},
})
2.监听网络状态变化
wx. onNetworkStatusChange(CallBack)接口用于监听网络状态变化,当网络状态变化时,返回当前网络状态类型及是否有网络连接。
示例代码如下:
wx.onNetworkStatusChange(function(res) {
console.log("网络是否连接:"+res.isConnected)
console.log("变化后的网络类型"+res.networkType)
})
6.3拨打电话
wx. makePhoneCall(Object)接口用于实现调用手机拨打电话。
示例代码:
wx.makePhoneCall({
phoneNumber:'18092585093'
})
6.4扫描二维码
wx. scanCode(Object)接口用于调起客户端扫码界面,扫码成功后返回相应的内容。
示例代码:
wx.scanCode({
success:(res)=>{
console.log(res.result)
console.log(res.scanType)
console.log(res.charSet)
console.log(res.path)
}
})
7.本章小结
本章主要介绍了小程序的各类核心API,包括网路API、多媒体API、文件API、本地数据缓存API、位置信息API及设备相关API等。通过本章的学习,大家应深刻地理解各类API是开发各类小程序的核心。