Android源代码分析--Preference之自动通话录音

功能介绍:在通话界面点击设置按钮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)在写功能代码的时候,尽可能地避免代码冗余度的问题,最好还是考虑问题全面一些,争取做到代码修复的问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值