Android实现通话呼叫转移与监听通话录音功能

您所在的位置:网站首页 远程设置呼叫转移脚本 Android实现通话呼叫转移与监听通话录音功能

Android实现通话呼叫转移与监听通话录音功能

2024-07-09 14:04| 来源: 网络整理| 查看: 265

一、呼叫转移功能。

呼叫转移CF(Call Forwarding,呼叫转移),是电信业一项传统通信业务,又称呼叫前转、呼入转移。如果您的电话无法接听或您不愿接电话,可以将来电转移到其它电话号码上。

我们知道,手机设置呼叫转移时,有这么以下几种设置方式:

无条件转移】设定:*57*电话号码#   取消:#57# 【无应答转移】设定:*41*电话号码#   取消:#41#   

【遇忙转移】 设定:*40*电话号码#   取消:#40#    “设定”或“取消”时输完 号码 和 符号 后按【呼叫】键,如果登记成功,则听到语音提示“您的业务已受理”,完成;  如果取消成功,则听到语音提示“您的业务已受理”,完成。 GSM手机呼叫转移设置方法   【无条件转移】设定:**21*电话号码#  取消:##21#    【无应答转移】设定:**61*电话号码#  取消:##61#    【遇忙转移】 设定:**67*电话号码#  取消:##67# CDMA手机呼叫转移设置方法   【无条件转移】设定:*72电话号码   取消:*720    【无应答转移】设定:*92电话号码   取消:*920    【遇忙转移】 设定:*90电话号码   取消:*900 具体到代码中实现,也是需要判断呼叫转移的类型,并设置其类型,关键代码如下:case R.id.change: // 转移 if (phoneNum != null && phoneNum.length() > 0) { if (IsValidMobileNo(phoneNum)) { intent = new Intent(); intent.setAction(Intent.ACTION_CALL); if (changeType == 0) { intent.setData(Uri .parse("tel:**21*" + phoneNum + "%23")); // 始终进行呼叫转移 } else if (changeType == 1) { intent.setData(Uri .parse("tel:**67*" + phoneNum + "%23")); // 占线时进行呼叫转移 } else if (changeType == 2) { intent.setData(Uri .parse("tel:**61*" + phoneNum + "%23")); // 无应答时进行呼叫转移 } else if (changeType == 3) { intent.setData(Uri .parse("tel:**62*" + phoneNum + "%23")); // 无法接通时进行呼叫转移 } startActivity(intent); } else { Toast.makeText(this, getString(R.string.app_name08), Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(this, getString(R.string.app_name07), Toast.LENGTH_SHORT).show(); } break;这是当点击呼叫转移时,判断下拉选项的类型,并进行呼叫转移功能的。 需要的几个权限如下:

监听通话状态,并拨打电话的权限。

二、监听通话,并录音功能。

对于监听通话记录,需要开启服务TelephonyManager得到服务Context.TELEPHONY_SERVICE。注册监听器,对电话进行监听PhoneStateListener.LISTEN_CALL_STATE

public void onCreate() { super.onCreate(); Log.i("TAG", "服务启动了"); mContext = getApplicationContext(); // 对电话的来电状态进行监听 TelephonyManager telManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); // 注册一个监听器对电话状态进行监听 telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); }

private class MyPhoneStateListener extends PhoneStateListener { MediaRecorder recorder; File audioFile; String phoneNumber; public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */ if (recorder != null) { recorder.stop(); // 停止刻录 recorder.reset(); // 重设 recorder.release(); // 刻录完成一定要释放资源 } break; case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */ try { recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频采集原 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 内容输出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 音频编码方式 // recorder.setOutputFile("/sdcard/myvoice.amr"); String rootPath; // 判断外部存储器是否存在 if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { // 外部存储器存在,返回其目录 // Environment.getExternalStorageDirectory().getAbsolutePath(); rootPath = Environment.getExternalStorageDirectory().getPath(); } else { rootPath = mContext.getFilesDir().getPath(); } StringBuilder fileName = new StringBuilder(); fileName.append(incomingNumber).append("_") .append(System.currentTimeMillis() + "") .append(".amr"); String path = rootPath + File.separator + fileName.toString(); Log.i("TAG", path + ""); recorder.setOutputFile(path); //Log.i("TAG", audioFile.getAbsolutePath()); recorder.prepare(); // 预期准备 recorder.start(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 (来电铃响时)*/ phoneNumber = incomingNumber; OutputStream os = null; try{ os = openFileOutput("phoneList",MODE_APPEND); }catch(FileNotFoundException e){ e.printStackTrace(); } PrintStream ps = new PrintStream(os); //将来电号码记录到文件中 ps.println("时间:"+new Date()+" 来电: " + phoneNumber); ps.close(); break; default: break; } super.onCallStateChanged(state, incomingNumber); } } 完整代码,可以看我写的简单例子:http://download.csdn.net/detail/chijicheng/3168543



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3