一、获取用户登录状态 和 获取用户信息
想获取用户信息,需要点击btn按钮,给button设置属性open-type="getUserInfo" 和bindgetuserinfo="MygetUserInfo"
<button open-type="getUserInfo" bindgetuserinfo="MygetUserInfo">获取用户信息</button>获取用户信息之前先获取登录状态wx.login,不过登录了微信的话一般登录状态都是对的,但也有时限,这个看文档吧。
登陆成功后调用wx.getUserInfo会弹出授权框,成功后就会返回一个存着用户头像名称等的信息,还有个加密信息,加解密还没看,看了补充
MygetUserInfo: function(){ var _this = this; wx.login({ success: function(res){ /* 获取用户信息的弹框 */ wx.getUserInfo({ /*withCredentials默认值为true,可不填,当设为false时就获取不到用户的加密信息*/ withCredentials: true, success: function(res){ console.log(res); var user = res.userInfo _this.setData({ userInfo: user, hasUserInfo: true }) }, fail:function(res){ console.log(res) } }) } })}
二、打开授权设置页面
方式1.wx.openSetting,给按钮添加一个点击事件,事件中直接调用api,但文档中说即将废弃,改用方法2
wx.openSetting({ success: res => { console.log(res) }})方式2.给button按钮设置属性open-type="openSetting" 和 bindopensetting="MyopenSetting",点击按钮也会弹出授权设置页面
<button open-type="openSetting" bindopensetting="MyopenSetting">查看用户设置界面并修改</button>MyopenSeting自定义事件里返回的事件对象res.detail.authSetting保存着授权状态,这个事件在设置页面关闭时触发
MyopenSetting: function(res){ console.log(res.detail.authSetting)},三、返回授权状态 wx.getsetting
在上面授权设置页面关闭时也会返回授权状态,但还包括其他信息,要一层一层找,这个wx.getsetting直接返回所有触发过授权弹窗的所有授权状态
四、主动调出授权框 wx.authorize()
原话是 “开发者可以使用 wx.authorize 在调用需授权 API 之前,提前向用户发起授权请求。”
参数是一个对象,其中scope属性设置是什么权限。scope.record就是录音授权,其他的看文档吧
wx.authorize({ scope: 'scope.record', success: res=>{ console.log(res) }})五、录音授权 和 录音使用
这个就是定义了 录音授权、开始录音、暂停录音、继续录音、停止录音四个按钮,然后绑定bindtap自定义事件
要使用录音需要先获取全局唯一的录音器。我是在onload中定义了一个const recorderManager = wx.getRecorderManager();然后把它setData到了data里,后面用录音器就调用this.data.recorderManager。但看网上是存到全局变量里,难道变量可以不定义在data中吗?还是说wxml需要这样{{}}调用的数据才必须放到data中?后面我再查查看,也希望朋友们谁知道的话说一声,谢啦!
最后要播放录音,需要先用wx.createInnerAudioContext获取全局唯一的播放器。然后在停止录音后,将生成的音频地址,传到播放器.src中,然后play(),onPlay事件处理播放器播放时的信息。
这里的播放器我是定义了一个局部变量,一开始想和录音器一样在onload中定义,然后全局使用的时候,发现有错误。(好吧,刚刚又试了一遍,发现只是在开发工具上报错,在手机上使不报错的) 因为我定义播放器后,给出错加了一个打印,InnerAudioContext.onError( res => {console.log(res)}),然后模拟时报错信息是
,但其实不管是全局还是局部播放器变量都会抱着个错,只不过我是改成局部时才在真机上实验的,可以用,我就以为局部才可以,现在我又试了下全局,手机上也可以,不报这个错。
// 设置录音授权的授权框 MyLYauthorize: function(){ console.log('录音授权') wx.authorize({ scope: 'scope.record', success: res=>{ console.log(res) } }) },//开始录音 startRecord: function(){ this.data.recorderManager.start() this.data.recorderManager.onStart(() => { console.log('recorder start') }) },//暂停录音和继续录音 pauseRecord: function (){ if(this.data.paused){ this.setData({ paused : false, pauseText: "暂停录音" }) this.data.recorderManager.resume() }else{ this.setData({ paused: true, pauseText: "继续录音" }) this.data.recorderManager.pause() } this.data.recorderManager.onPause(() => { console.log('recorder pause') }) },//停止录音,此时会返回一个时间对象,里面存着音频的src、时间一类的信息 stopRecord: function (){ this.data.recorderManager.stop() this.data.recorderManager.onStop((res) => { console.log('recorder stop') console.log(res) var recordFile = res.tempFilePath; this.setData({ recordFile: recordFile, }) }) },//播放录音,需要先用wx.createInnerAudioContext获取全局唯一的播放器。然后在停止录音后,将生成的音频地址,传到播放器.src中,然后play(),onPlay事件处理播放器播放时的信息 playRecord: function(){ var InnerAudioContext = wx.createInnerAudioContext(); console.log(InnerAudioContext) InnerAudioContext.onError( res => { console.log(res) }) InnerAudioContext.src = this.data.recordFile InnerAudioContext.play();//在安卓手机上可以播放,但暂停不管用 InnerAudioContext.onPlay(() => { console.log("播放"); }) },六、地理位置授权
地理位置授权成功之后,我是又调用了打开地图查看位置的api wx.getLocation()。
参数里的type有两种:“wga84” 和'gcj02'
使用第一种的话就是用wx.chooseLocation打开地图;
使用第二种的话就是用wx.openLocation打开微信内置地图。上面那个是什么地图我也不清楚,汗。
刚刚在安卓手机上试了下,发现第一种打不开地图,授权之后没反应。第二种可以打开。
MyDLauthorize: function(){ console.log("地理位置授权") wx.authorize({ scope: 'scope.userLocation', success: res => { //打开地图查看位置 wx.getLocation({ type:"wga84", success: function(res){ // console.log(res) wx.chooseLocation({ success: res => { console.log(res) } }) } }) // 打开微信内置地图wx.openLocation wx.getLocation({ type: 'gcj02', //返回可以用于wx.openLocation的经纬度 success: function (res) { var latitude = res.latitude var longitude = res.longitude wx.openLocation({ latitude: latitude, longitude: longitude, scale: 28 }) } }) } }) },七、分享功能的开和关
定义了一个开启分享功能的btn,一个关闭分享功能的btn,还有一个通过点击按钮分享页面的btn(这个按钮是需要用botton属性open-type的)
<button bindtap="startShare">允许分享</button><button bindtap="stopShare">关闭分享</button><!-- button属性plain="false"会镂空 --><button open-type="share" type="primary" data-id="1">分享</button>然后定义两个自定义事件,和一个监听事件(onShareAppMessage监听事件用来监听分享的操作。分享方式一个是点击右上角的...,另一种就是用button。监听事件可以判断是不是通过点击按钮分享的,见代码)
// 开启分享 startShare: function(){ wx.showShareMenu({ }) }, // 关闭分享 stopShare: function(){ wx.hideShareMenu({ }) }, // 分享设置 onShareAppMessage: function(res){ if (res.from === 'button') { // 来自页面内转发按钮 console.log(res.target) } return { title: '测试分享标题', path: '/pages/home',//换成别的地址也不生效,还是当前地址 imageUrl: '/images/logo_dog3.jpg' } }
终于把今天下午的这些东西整理完了。。。洗澡去~













