ホームページ >ウェブフロントエンド >uni-app >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('已获取的权限:' + grantedPermission); result = 1 } for (var i = 0; i < resultObj.deniedPresent.length; i++) { var deniedPresentPermission = resultObj.deniedPresent[i]; console.log('拒绝本次申请的权限:' + deniedPresentPermission); result = 0 } for (var i = 0; i < resultObj.deniedAlways.length; i++) { var deniedAlwaysPermission = resultObj.deniedAlways[i]; console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); result = -1 } }, function(error) { console.log('申请权限错误:' + error.code + " = " + error.message); } ); }
に配置できます。注意事項
1. デバッグ モードでは、通話のハングアップを正常に監視できます また、ファイルをアップロードしましたが、パッケージ化すると無効になってしまいますか?
一般的な携帯電話のパッケージは正常に使用できます。私はoneplus7を使用しています。パッケージ後、インストールして正常に使用できます。一部の携帯電話では、システム設定の権限に移動し、[モバイルデバイスの状態をオンにする]をオンにする必要がありますコード] これが私がこれまでに遭遇したものです。
以上がuniappの通話録音機能実装方法の詳細説明(コアコード付属)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。