目錄
uniapp 實現打電話錄音功能
首頁 web前端 uni-app 實例詳解uniapp如何實現電話錄音功能(附代碼)

實例詳解uniapp如何實現電話錄音功能(附代碼)

Jan 05, 2023 pm 04:41 PM
uni-app

這篇文章為大家帶來了關於uniapp的相關知識,其中主要介紹了怎麼用uniapp實現撥打電話並且還能同步錄音的功能,感興趣的朋友一起來看一下吧,希望對大家有幫助。

實例詳解uniapp如何實現電話錄音功能(附代碼)

uniapp 實現打電話錄音功能

最近需要實現一個透過uniapp 呼叫手機撥打電話的功能,撥打之後同時錄音,掛斷電話之後將錄音檔案進行上傳,現在將幾個核心程式碼分享給大家!

const recorderManager = uni.getRecorderManager();
onLoad(option) {
            let self = this;
            recorderManager.onStop(function (res) {
                console.log("res",res)
                self.end_time = Math.round(new Date().getTime() / 1000);
                let voicePath = res.tempFilePath;
                self.voicePath = voicePath;
                self.closeTimeOut();
                uni.showToast({
                    icon: 'loading',
                    title: "请稍后...",
                    duration: 0
                });
                uni.uploadFile({
                    url: self.upload_url,
                    filePath: voicePath,
                    name: "file",
                    formData: {
                        id: self.phoneInfo.id,
                        start_time: self.start_time,
                        end_time: self.end_time,
                        phone: self.phoneNumber
                    },
                    header: {
                        Authorization: "Bearer " + uni.getStorageSync(EnumData.token)
                    },
                    success: (res) => {
                        // console.log("文件上传成功")
                        console.log(res.data);
                    },
                    fail(err) {
                        console.log("文件上传失败")
                        console.log(err);
                    },
                    complete() {
                        self.start_time = 0;
                        self.end_time = 0;
                        uni.hideToast();
                    }
                })
            });
            this.getCallStatus();
}
getCallStatus() {
    let that = this;
    let maintest = plus.android.runtimeMainActivity();
    let Contexttest = plus.android.importClass("android.content.Context");
    let telephonyManager = plus.android.importClass("android.telephony.TelephonyManager");
    let telManager = plus.android.runtimeMainActivity().getSystemService(Contexttest.TELEPHONY_SERVICE);
    let receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
        onReceive: function (Contexttest, intent) {
            plus.android.importClass(intent);
            let phoneStatus = telManager.getCallState();
            that.callStatus = phoneStatus; //电话状态 0->空闲状态 1->振铃状态 2->通话存在
            switch (phoneStatus) {
                case 0:
                    console.log("3、电话挂断,上传录音")
                    // 结束录音
                    recorderManager.stop();
                    break;
                case 1:
                    // console.log('1、振铃状态');
                    break;
                case 2:
                    console.log('2、通话存在')
                    // 延迟录音
                    that.start_time = Math.round(new Date().getTime() / 1000);
                    recorderManager.start({
                        duration: EnumData.audioDuration, // 时长 10分钟
                        sampleRate: EnumData.audioSampleRate, // 码率
                    });
                    break;
            }
        }
    });
    let IntentFilter = plus.android.importClass('android.content.IntentFilter');
    let filter = new IntentFilter();
    filter.addAction(telephonyManager.ACTION_PHONE_STATE_CHANGED);
    maintest.registerReceiver(receiver, filter);
},
登入後複製

需要申請的權限,可以放到App.vue 中

if (plus.os.name == 'Android') {
      plus.android.requestPermissions(
         ['android.permission.ANSWER_PHONE_CALLS',//手动 挂断和接听 需要这个权限
          "android.permission.MODIFY_AUDIO_SETTINGS",//手动 挂断和接听 需要这个权限
          "android.permission.CALL_PHONE",//手动 挂断和接听 需要这个权限
          "android.permission.READ_PHONE_STATE",//>监听电话状态 需要这个权限
          "android.permission.READ_CALL_LOG",//获取号码需要这个权限
          "android.permission.READ_AUDIO" // 录音权限
          ],
      function(resultObj) {
          var result = 0;
          for (var i = 0; i < resultObj.granted.length; i++) {
          var grantedPermission = resultObj.granted[i];
          console.log(&#39;已获取的权限:&#39; + grantedPermission);
          result = 1
      }
      for (var i = 0; i < resultObj.deniedPresent.length; i++) {
          var deniedPresentPermission = resultObj.deniedPresent[i];
          console.log(&#39;拒绝本次申请的权限:&#39; + deniedPresentPermission);
          result = 0
      }
      for (var i = 0; i < resultObj.deniedAlways.length; i++) {
          var deniedAlwaysPermission = resultObj.deniedAlways[i];
          console.log(&#39;永久拒绝申请的权限:&#39; + deniedAlwaysPermission);
          result = -1
      }
     },  function(error) {
          console.log(&#39;申请权限错误:&#39; + error.code + " = " + error.message);
     } );
}
登入後複製

注意點

  • 調試模式下可以正常監聽通話掛斷並且上傳文件的,但是打包之後就失效?

一般的手機打包是可以正常使用的,我用的是oneplus7 , 打包後安裝正常使用,部分手機需要到系統設定的權限中,將應用的【開啟手機設備狀態碼】進行開啟即可,目前遇到的就這個。

推薦學習:《uni-app影片教學

以上是實例詳解uniapp如何實現電話錄音功能(附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VSCode中如何開發uni-app? (教學分享) VSCode中如何開發uni-app? (教學分享) May 13, 2022 pm 08:11 PM

VSCode中如何開發uni-app?以下這篇文章跟大家分享一下VSCode中開發uni-app的教學課程,這可能是最好、最詳細的教學了。快來看看!

利用uniapp開發一個簡單的地圖導航 利用uniapp開發一個簡單的地圖導航 Jun 09, 2022 pm 07:46 PM

怎麼利用uniapp開發一個簡單的地圖導航?本篇文章就來提供大家一個製作簡單地圖的思路,希望對大家有幫助!

聊聊如何利用uniapp開發一個貪吃蛇小遊戲吧! 聊聊如何利用uniapp開發一個貪吃蛇小遊戲吧! May 20, 2022 pm 07:56 PM

如何利用uniapp開發一個貪吃蛇小遊戲?以下這篇文章就手把手帶大家在uniapp中實現貪吃蛇小遊戲,希望對大家有幫助!

uni-app vue3介面請求怎麼封裝 uni-app vue3介面請求怎麼封裝 May 11, 2023 pm 07:28 PM

uni-app接口,全域方法封裝1.在根目錄建立一個api文件,在api資料夾中建立api.js,baseUrl.js和http.js檔案2.baseUrl.js檔案程式碼exportdefault"https://XXXX .test03.qcw800.com/api/"3.http.js檔案程式碼exportfunctionhttps(opts,data){lethttpDefaultOpts={url:opts.url,data:data,method:opts.method

實例講解uniapp實現多選框的全選功能 實例講解uniapp實現多選框的全選功能 Jun 22, 2022 am 11:57 AM

這篇文章為大家帶來了關於uniapp的相關知識,其中主要整理了實現多選框的全選功能的相關問題,無法實現全選的原因是動態修改checkbox的checked字段時,界面上的狀態能夠即時變化,但無法觸發checkbox-group的change事件,下面一起來看一下,希望對大家有幫助。

手把手帶你開發一個uni-app日曆插件(並發布) 手把手帶你開發一個uni-app日曆插件(並發布) Jun 30, 2022 pm 08:13 PM

這篇文章手把手帶大家開發一個uni-app日曆插件,介紹下一個日曆插件是如何從開發到發布的,希望對大家有幫助!

聊聊uniapp的scroll-view下拉加載 聊聊uniapp的scroll-view下拉加載 Jul 14, 2022 pm 09:07 PM

uniapp怎麼實作scroll-view下拉載入?以下這篇文章聊聊uniapp微信小程式scroll-view的下拉加載,希望對大家有幫助!

實例詳解uniapp如何實現電話錄音功能(附代碼) 實例詳解uniapp如何實現電話錄音功能(附代碼) Jan 05, 2023 pm 04:41 PM

這篇文章為大家帶來了關於uniapp的相關知識,其中主要介紹了怎麼用uniapp實現撥打電話並且還能同步錄音的功能,感興趣的朋友一起來看一下吧,希望對大家有幫助。

See all articles