一、呼叫转移功能。

呼叫转移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;
这是当点击呼叫转移时,判断下拉选项的类型,并进行呼叫转移功能的。
需要的几个权限如下:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

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

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

对于监听通话记录,需要开启服务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

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

  1. android监听通话状态

    samsung提审结果报告里: application sound is audible during the call in pop up window //在弹出窗口中的呼叫期间,<缺陷&g ...

  2. Android 监听通话状态(挂断 监听 来电)实现自动外呼 按顺序拨出电话 间隔5秒

    最近项目也是添加一个小功能 监听通话状态实现一个自动外呼的功能 我在这里简单的实现了一下转了几天的博客可各大网站找出了一个最简单也好理解的一个方法(至今为止) 其实就用到了我们Android源生自带的 ...

  3. Android实现来电和去电的监听

    写个实例实现Android中来电和去电的监听,来电可以使用PhoneStateListener对电话状态的改变进行监听,去电需要动态或者静态去注册广播接收器,对去电进行监听: 来电: 来电所对应的三种 ...

  4. Android事件的响应,Android 开发事件响应之基于监听的事件响应

    Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...

  5. Android广播接实现电话的监听(电话的状态,拦截)

    Android广播接实现电话的监听 1:需要在AndroidManifest.xml清单中添加权限 <uses-permission android:name="android.per ...

  6. Android RecyclerView(九)滑动监听综述

    Android RecyclerView(九)滑动监听 1 RecyclerView 的滑动监听 1.1 RecyclerView 设置滑动监听 mRecyclerView.setOnScrollLi ...

  7. 用蓝牙构建一个sniffer来监听通话

    1. 简介 刚刚毕业接触到了一个挺有意思的蓝牙TWS (Bluethooth True Wireless Stereo)的项目.由于在建立语音通路(SCO, Synchronous Connectio ...

  8. Android中自定义ScrollView的滑动监听事件,并在滑动时渐变标题栏背景颜色

    效果图 滑动前: 滑动中: 滑动到底部: 项目结构 ObservableScrollView package com.jukopro.titlebarcolor;import android.cont ...

  9. Android 无法监听安装,Android关于apk安装成功广播监听

    有这样的应用场景,apk安装成功后需要重启APP,就需要监听完成安装的回调或者广播 public class UpdateReceiver extends BroadcastReceiver { pr ...

  10. Android开发之使用BroadcastReceiver实时监听电量(源代码分享)

    Android系统中实时的监听手机电量以及开机启动功能都是通过BroadcastReceiver组件实现的.我们可以动态注册这个类的一个实例通过Context.registerReceiver()方法 ...

最新文章

  1. 设置Nginx开机自动启动(centos6.8上亲测可用)
  2. 又见灵异事件,li中的span右浮动遇到的问题
  3. java JFrame修改左上角的图片
  4. 如何运用DDD - 实体
  5. java lambda 调用函数_Java lambda函数将如何编译?
  6. 解决linux写入ntfs盘时报错:只读文件系统
  7. (25)HTML5之<canvas>和<svg>标签
  8. Vue 中实现双向绑定的 4 种方法
  9. ibatis 直接升格为 apache 一级项目了
  10. 洛谷P1322 logo语言
  11. 使用Python3进行身份证号码标准验证
  12. 小牛电动车能跑多快、多远?一起来了解一下
  13. 30天自制操作系统——第二十四天增加命令行窗口
  14. searchEngin_设置bing国际版为默认引擎
  15. XMPP协议的工作原理
  16. 【音视频技术】AVC H264的一些基本概念和知识点
  17. uniapp 网易云音乐app项目总结
  18. 回音消除、噪音抑制的原理
  19. 对 BFC 规范(块级格式化上下文:block formatting context)的理解?
  20. 从 Git 提交中删除文件

热门文章

  1. php 将rgb转cmyk,将CMYK颜色值和RGB颜色相互转换的PHP代码
  2. php短信接口怎么用,php短信接口接入详细过程
  3. STM32 与 ST-Link V2仿真器 接线与烧录
  4. 扫描无法传送到计算机,文件无法从复印机扫描到电脑?可能是以下操作您没有注意到...
  5. 将多张图片合并为一张图片
  6. 谷歌浏览器JSON格式化插件
  7. Android 判断是否有外网连接
  8. C语言华氏度转换摄氏度
  9. P4173 残缺的字符串(带通配符的字符串匹配,FFT)
  10. [模板] 洛谷 P1137 旅行计划 (拓扑排序)