您的位置:首页 > 移动开发 > Android开发

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

2016-07-13 18:05 405 查看
功能介绍:在通话界面点击设置按钮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) {

         m
4000
Call = 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)在写功能代码的时候,尽可能地避免代码冗余度的问题,最好还是考虑问题全面一些,争取做到代码修复的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息