功能介绍:在通话界面点击设置按钮setting—General—Auto Call Recording中进行勾选,如勾选的是on则在通话中自动录音,否则正常通话不录音。
实现步骤:
1)在general_setting.xml文件中加入布局文件:具体代码如下所示:
    <CheckBoxPreference
            android:key="auto_call_recording_key"
            android:title="@string/auto_call_recording_title"
            android:defaultValue="false"
            android:summaryOn="@string/auto_call_recording_on"
            android:summaryOff="@string/auto_call_recording_off"/>
      该布局文件主要讲的是preference布局,其中key值跟id是一个意思,title的话是控件的名称,defaultValue指的是开关的默认值,summary指的是该控件有两个选项。
2)对该控件添加点击事件并保存,需要在GeneralSettingFragment.java文件中对该控件进行监听操作,在onCreate()函数下加入以下代码:
mAutoRecordingWhencall=(CheckBoxPreference)findPreference(BUTTON_AUTORECORD_KEY);//声明该控件
mAutoRecordingWhencall.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
{//对该控件进行监听
 @Override
 public boolean onPreferenceChange(Preference preferences, Object newValue) {
        boolean autoRecord = (Boolean) newValue;
        //读取控件的值
        Settings.System.putInt(mContext.getContentResolver(),
           Settings.System.AUTO_CALL_RECORDING_SETTING, autoRecord ? 1 : 0);
       // 保存控件的选择
         //   Toast.makeText(mContext, "mAutoRecordingWhencall=" + (Boolean)newValue, Toast.LENGTH_LONG).show();
              if(newValue==true){
                  Log.d(TAG,"startautorecording ");
                     }
              else if (newValue==false){
                  Log.d(TAG,"no auto recording");
                  }
                return true;
            }    
           });
3)找到通话模块的CallButtonPresenter.java代码,读取开关的值即可完成功能模块,代码如下所示:
  @Override
    public void onStateChange(InCallState oldState, InCallState newState, CallList callList) {
        CallButtonUi ui = getUi();
        if (newState == InCallState.OUTGOING) {
                mCall = callList.getOutgoingCall();
           {
            if (isEmergencyCall(mCall)) {
                muteClicked(false);
            }
           }
        } else if (newState == InCallState.INCALL) {
         mCall = callList.getActiveOrBackgroundCall();
  if ((oldState == InCallState.OUTGOING || oldState == InCallState.INCOMING)
           && mCall != null && (mCall.getState()    ==Call.State.ACTIVE)) {
                   boolean isAutoCallRecordingOn =
                   Settings.System.getInt((((CallButtonFragment)getUi()).getActivity ()).getContentResolver(),   Settings.System.AUTO_CALL_RECORDING_SETTING, 0) == 1;
                    if(isAutoCallRecordingOn) {
                        ((CallButtonFragment)getUi()).onVoiceRecordforAutorecord();
                    }
                 }
通过修改即可实现通话录音的功能。
总结:1)在找相关的资源时可以根据相应的图片或者字符串来找到相关的功能代码,在项目开发中,尽可能地快速定位问题,使用便捷的方式修改问题;
      2)在写功能代码的时候,尽可能地避免代码冗余度的问题,最好还是考虑问题全面一些,争取做到代码修复的问题。

Android源代码分析--Preference之自动通话录音相关推荐

  1. Android源代码分析之类方法与组件名词解释(持续更新)

    Android源代码分析方法组件详解 1. 类方法 1.1 Handler方法 1.2 Looper方法 1.3 Binder 1.4 Instrumentation 2. 组件 2.1 AMS.WM ...

  2. 地表最强之Android微信语音/腾讯会议通话录音

    前言 说话这个功能前前后后倒腾很久了,一开始是在小米手机上看到这个功能的,使用系统自带录音机 就能录下微信语音通话双方声音,再对比了其它手机都没有这个功能,瞬间觉得很牛皮.那我胡汉三 肯定是要来搞一哈 ...

  3. Android通话录音流程

    Android手机现在基本上都有通话录音的功能.那么这个功能的原理是什么呢, 原理:语音通话包含uplink 和downlink数据,因此只要分别获取这两部数据,然后将PCM 格式的语音流转存成其他格 ...

  4. Android Applicaion组件创建的源代码分析(Android 9,含序列图)

    Application组件源代码分析 1. Applicaion启动流程源代码分析 2. 启动过程中应用进程.系统服务进程通信的分界点 3. 组件生命周期与系统服务的关系 4. Application ...

  5. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系统进程间通信(IPC)机制Binder ...

  6. Android设计缺陷--无法通话录音

    这个问题在Google Code之Android上讨论 了快一年,还没解决.这成为不少人无法从Symbian系统转移到Android系统的主要原因. Android手机搭配有强大的硬件,具有很多实用和 ...

  7. 嘿嘿这个好玩---新型Android手机病毒现身 可对通话过程录音

    据美国科技杂志<网络世界>(Network World)网络版报道,一种针对谷歌Android智能手机的新型病毒已经现身,它能在用户毫不知情状态下对通话过程进行录音.安全专家指出,此类病毒 ...

  8. Android源代码编译命令m/mm/mmm/make分析

    Android源代码编译命令m/mm/mmm/make分析 2014-03-10     我来说两句    来源:Android源代码编译命令m/mm/mmm/make分析   收藏    我要投稿 ...

  9. 【视频教程】老罗分享Android源代码下载和编译及如何分析源代码

    小编语:老罗(罗升阳)的Android之旅,在国内是让不少人收益,也给了我非常大的启示,老罗最近自己折腾了一个网站叫<进击的程序员>,域名:http://0xcc0xcd.com/,继续他 ...

  10. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

最新文章

  1. 【以太坊】搭建测试网络之ubuntu系统安装golang环境以及helloworld
  2. 易混淆的c++知识点
  3. Product Distribution chain id F4 value help的实现
  4. 设置MongoDB副本集分为4个步骤
  5. POJ3246-Balanced Lineup,好经典的题,做法和HDU-I hate it 一样~~
  6. tableau无法建立连接_欧普照明利用 Tableau 解放数字化人才,助力企业数字化转型...
  7. 16、Flutter Widget - PageView;
  8. JDK默认是little-endian
  9. Latex入门----从提纲开始
  10. win10找回自带的windows照片查看器——打开jpg、png、gif、psd其他格式的图片
  11. 中国大陆芯片设计企业名单
  12. JDK1.8的Lambda表达式使用(一)
  13. 当开发人员说不是BUG时如何应对
  14. 基于ABP的AppUser对象扩展
  15. 学籍管理系统(C语言版)
  16. ORACLE XE在centos平台下安装方法
  17. 做外贸怎么起步,从哪里开发客户
  18. mysql 换文件夹_windows下更换MySql数据库数据文件夹位置
  19. 8.HPA自动扩缩容
  20. 关于.SMP格式音乐加密文件破解方法的一些尝试

热门文章

  1. NGUI Sprite的各种Type(Simple、Sliced、Tiled、Filed、Advanced)
  2. HC-SR501人体红外传感器
  3. 修复 iPhone X H5 底部安全区域定位按钮下内容穿透 BUG
  4. sklearn实现Adaboost算法(分类)
  5. 建立matlab桌面遇到Error Staring Desktop
  6. Java之网络编程(二)UDP
  7. java for 代表什么意思_for(int a:i)在java 编程中是什么意思
  8. 数显之家快讯:【SHIO世硕心语】做为职业经理人,你想成为车轮,还是发动机,还是方向盘?
  9. 发现在创建云服务器ecs实例的磁盘快照时_阿里云服务器怎么重装系统 阿里云VPS如何重装系统...
  10. high sierra php,mac os high sierra下搭建php多版本-php5.2+php5.6-nginx