实例详解uniapp如何实现电话录音功能(附代码)
7580
本篇文章给大家带来了关于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);
- } );
- }
注意点
调试模式下可以正常监听通话挂断并且上传文件的,但是打包之后就失效?
一般的手机打包是可以正常使用的,我用的是 oneplus7 , 打包后安装正常使用,部分手机需要到系统设置的权限中,将应用的【开启手机设备状态码】进行开启即可,目前遇到的就这个。
本文网址:https://www.zztuku.com/index.php/detail-13699.html
站长图库 - 实例详解uniapp如何实现电话录音功能(附代码)
申明:本文转载于《learnku》,如有侵犯,请 联系我们 删除。
您还没有登录,请 登录 后发表评论!
提示:请勿发布广告垃圾评论,否则封号处理!!