關(guān)于小程序相機(jī)授權(quán),獲取權(quán)限愈污,拍照耀态,取景框遮蓋添加文字等踩坑和實際操作

一. 相機(jī)授權(quán)
1. 需求:
從A(首頁)->B->C->D(三個步驟頁面)->E(拍照頁面)。
2. 遇到的問題:
相機(jī)何時判斷是否授權(quán)钙畔,獲取相機(jī)權(quán)限茫陆?
3. 在進(jìn)入E頁面時判斷是否授權(quán),如果未授權(quán)擎析,隱藏camera組件簿盅,提示用戶授權(quán)(第一次彈窗挥下,第二次跳轉(zhuǎn)手機(jī)應(yīng)用權(quán)限管理中修改權(quán)限頁面),待用戶授權(quán)成功后正常顯示E頁面camera組件桨醋。出現(xiàn)了bug:
(1). 當(dāng)用戶同意授權(quán)棚瘟,或者是進(jìn)入權(quán)限管理頁修改權(quán)限成功后,頁面的camera相機(jī)組件不顯示喜最,無法出現(xiàn)取景框偎蘸。當(dāng)時決定取景框是否顯示用的v-show和v-if都無效,在小程序社區(qū)咨詢也無果瞬内。
(2).首次進(jìn)入E會發(fā)起彈窗迷雪,第二次不會,多次進(jìn)入時效果混亂不統(tǒng)一虫蝶。
(3).小程序改版章咧,相機(jī)授權(quán)需要通過用戶在頁面的點擊操作,不能直接獲取信息能真。
4. 經(jīng)過思考赁严,重新整理邏輯,決定在啟動小程序時在app.js就獲取用戶權(quán)限粉铐,第一次如果沒有會出現(xiàn)彈窗疼约,在D頁面進(jìn)入下一頁面跳轉(zhuǎn)時判斷是否有相機(jī)授權(quán),避免在E頁面操作太多邏輯導(dǎo)致camera組件不顯示蝙泼。
app.js代碼示例:

   // 獲取用戶授權(quán)設(shè)置程剥,如果用戶第一次進(jìn)入未授權(quán)會出現(xiàn)彈窗
    wx.getSetting({
      success: response => {
        if (!response.authSetting['scope.camera']) {
          wx.authorize({
            scope: 'scope.camera',
            success() {
              // 同意攝像頭
            },
            fail() {
              // 不同意攝像頭
            }
          })
        }
      },
      fail: res => {
      },
      complete: res => {
      },
    }) 

D頁面:由于小程序規(guī)定不能直接調(diào)用,必須用button調(diào)用戶權(quán)限踱承,所以設(shè)置一個中間頁向用戶詢問倡缠,用戶同意跳轉(zhuǎn)授權(quán)設(shè)置頁,設(shè)置成功后返回中間頁再跳轉(zhuǎn)E頁面

D頁面
中間頁

授權(quán)設(shè)置頁
Page({
  stepBtn: function () {
    // 檢查權(quán)限茎活,看是否跳轉(zhuǎn)
    wx.getSetting({
      success(res) {
        if (!res.authSetting['scope.camera']) {
          //無權(quán)限昙沦,跳轉(zhuǎn)設(shè)置權(quán)限頁面
          wx.redirectTo({
            url: '../needSet'
          })
        } else {
          //有權(quán)限,跳轉(zhuǎn)拍照頁
          wx.redirectTo({
            url: '../camera'
          })
        }
      }
    })
  }
})

中間頁:

Page({
  //打開設(shè)置
  beginSet(){
    if (wx.openSetting) {
      wx.openSetting({
        scope: 'scope.camera',
        success(errMsg) {
          if (errMsg.authSetting['scope.camera']) {
            //設(shè)置授權(quán)成功,跳轉(zhuǎn)拍照頁
            wx.redirectTo({
              url: '../camera'
            })         
          }
        }
      })
    } else {
      wx.showModal({
        title: '授權(quán)提示',
        content: '小程序需要您的微信授權(quán)才能使用哦~ 錯過授權(quán)頁面的處理方法:刪除小程序->重新搜索進(jìn)入->點擊授權(quán)按鈕'
      })
    } 
  }
})

二. 相機(jī)拍照
這時候就可以確保在授權(quán)成功的情況下载荔,進(jìn)入E頁面(E頁面特殊需求:取景框被遮蓋的只能露出中間部分盾饮,同時被遮蓋部分要寫上提示文字)


E頁面
// e-wxml部分代碼截取,
<camera device-position="back" flash="off" binderror="error" style="width: 100%; height: {{cameraHeight}}px;" '>
      <cover-view class='coverCircle'>
        <cover-view class='cover-top' style='width:{{cameraWidth}}px;height:{{coverHeight}}px'></cover-view>
        <cover-view class='cover-left' style='width:{{coverWidth}}px;height:{{needPic}}px;top:{{coverHeight}}px'></cover-view>
        <cover-view class='cover-right' style='width:{{coverWidth}}px;height:{{needPic}}px;top:{{coverHeight}}px'></cover-view>
        <cover-view class='cover-bottom' style='width:{{cameraWidth}}px;height:{{coverHeight}}px'></cover-view>
        <cover-view class='camera-text'>提示文字:手機(jī)水平俯拍懒熙,二維碼與取景框邊框平行并充滿取景框丘损,光線適度對焦清晰。</cover-view>
      </cover-view>
    </camera>
//e-js
  //設(shè)置相機(jī)大小
  setwidth() {
    this.setData({
      cameraWidth: wx.getSystemInfoSync().windowWidth
    }, () => {
      this.setData({
        coverWidth: (this.data.cameraWidth - this.data.needPic) / 2,
        coverHeight: (this.data.cameraHeight - this.data.needPic) / 2
      })
    })
  },
  //拍照
  takePhoto() {
    var that = this;
    that.ctx = wx.createCameraContext(that);
    that.ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        that.setData({
          src: res.tempImagePath,
        })
      },
      fail: (res) => {
        // 拍照失敗
        // console.log(res+'拍照失敗')
      }
    })
  },
  // 上傳照片
  uploadPhoto() {
    var that = this;
    var openId = app.globalData.openId;
    wx.showLoading({
      title: '圖片上傳中...'
    })
    wx.uploadFile({
      url: api.baseUrl + "api/PostImage",
      filePath: that.data.src,
      name: 'filew',
      formData: {
        'userid': openId
      },
      success: (res) => {}
    })
  },
````


      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末工扎,一起剝皮案震驚了整個濱河市徘钥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肢娘,老刑警劉巖呈础,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舆驶,死亡現(xiàn)場離奇詭異,居然都是意外死亡而钞,警方通過查閱死者的電腦和手機(jī)沙廉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臼节,“玉大人撬陵,你說我怎么就攤上這事⊥欤” “怎么了巨税?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長途凫。 經(jīng)常有香客問我垢夹,道長,這世上最難降的妖魔是什么维费? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮促王,結(jié)果婚禮上犀盟,老公的妹妹穿的比我還像新娘。我一直安慰自己蝇狼,他們只是感情好阅畴,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迅耘,像睡著了一般贱枣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颤专,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天纽哥,我揣著相機(jī)與錄音,去河邊找鬼栖秕。 笑死春塌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的簇捍。 我是一名探鬼主播只壳,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼暑塑!你這毒婦竟也來了吼句?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤事格,失蹤者是張志新(化名)和其女友劉穎惕艳,沒想到半個月后搞隐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡尔艇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年尔许,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片终娃。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡味廊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棠耕,到底是詐尸還是另有隱情余佛,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布窍荧,位于F島的核電站辉巡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蕊退。R本人自食惡果不足惜郊楣,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓤荔。 院中可真熱鬧净蚤,春花似錦、人聲如沸输硝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽点把。三九已至橘荠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郎逃,已是汗流浹背哥童。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留衣厘,地道東北人如蚜。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像影暴,于是被迫代替她去往敵國和親错邦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345