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