>  기사  >  웹 프론트엔드  >  uniapp이 전화 녹음 기능을 구현하는 방법에 대한 자세한 예(코드 포함)

uniapp이 전화 녹음 기능을 구현하는 방법에 대한 자세한 예(코드 포함)

藏色散人
藏色散人앞으로
2023-01-05 16:41:124033검색

이 글은 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);
     } );
}

Notes

  • 디버깅 모드에서는 일반적으로 통화 끊김 모니터링 및 파일 업로드가 가능하지만 패키징하고 나면 무효화되나요?

일반 휴대폰 포장은 정상적으로 사용 가능합니다. oneplus7을 사용합니다. 일부 휴대폰은 시스템 설정의 권한에 들어가 [휴대기기 켜기]를 켜야 정상적으로 설치 및 사용이 가능합니다. 상태 코드] , 이것이 지금까지 내가 본 것입니다.

추천 학습: "uni-app 비디오 튜토리얼"

위 내용은 uniapp이 전화 녹음 기능을 구현하는 방법에 대한 자세한 예(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제