短信ui分析--设置界面
1、概括
短信设置界面,主要给用户提供以下功能
1)存储设置,这里主要是关于一个会话存储短信的数量限制
2)短信设置,主要是是否开启短信的发送报告、短信模版管理、sim卡短信管理、短信中心号码显示
3)短信签名设置,短信签名是否开启,以及设置短信签名的内容
4)彩信设置,是否开启发送报告、已读报告、是否自动接收附件
5)通知设置,主要是是否开启通知、铃声选择震动模式等等
6)小区广播,主要是开启,设置频道
下面会分开来讲这些功能具体是做什么的,实现原理,怎么体现出来。
2、存储设置
首先来看看短信存储的界面如下图所示,该项实际上就是三个功能:1、当会话中相应信息达到设置的值,删除掉old的信息;2、设置一个会话中短信的数量;3、设置会话中彩信的数量。其中删除old的信息又决定了后面两个功能是否可用,因为如果这项功能不启用,对于每个会话设置短信、彩信的数量也就没有太多意义。

图1
从上图可以看出三个选项,删除旧的信息前提是当信息量达到设置的限制时,但大家可以尝试当删除旧的信息没有被选中的时候下面两个选项也不能进行编辑,也即是下面两个选项依赖上面两个选项,这里可以从其配置文件来看出其依据。
<PreferenceCategory android:title="@string/pref_sms_storage_title"
<CheckBoxPreference android:defaultValue="true"
android:key="pref_key_auto_delete"
android:summary="@string/pref_summary_auto_delete"
android:title="@string/pref_title_auto_delete" />
<Preference android:key="pref_key_sms_delete_limit"
android:dependency="pref_key_auto_delete"
android:persistent="false"
android:summary="@string/pref_summary_delete_limit"
android:title="@string/pref_title_sms_delete" />
<Preference android:key="pref_key_mms_delete_limit"
android:dependency="pref_key_auto_delete"
android:persistent="false"
android:summary="@string/pref_summary_delete_limit"
android:title="@string/pref_title_mms_delete" />
</PreferenceCategory>
2.1 设置信息的保存
删除旧的短信息,那它要删除旧的信息前提是达到各种设置的信息上限,这些上限值从何而来,其值就是下面两个选项用户设置的值,这些值会保存到
com.android.mms_preferences.xml文件里,这里因为用的是sharedpreference来保存这些变量值:
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
if (preference == mSmsLimitPref) {
new NumberPickerDialog(this,
mSmsLimitListener,
mSmsRecycler.getMessageLimit(this),
mSmsRecycler.getMessageMinLimit(),
mSmsRecycler.getMessageMaxLimit(),
R.string.pref_title_sms_delete).show();
} else if (preference == mMmsLimitPref) {
new NumberPickerDialog(this,
mMmsLimitListener,
mMmsRecycler.getMessageLimit(this),
mMmsRecycler.getMessageMinLimit(),
mMmsRecycler.getMessageMaxLimit(),
R.string.pref_title_mms_delete).show();
}
以上代码就是侦听用户设置的值,并保存到xml中,格式如下所示:
<boolean name="pref_key_auto_delete" value="true" />
<int name="MaxMmsMessagesPerThread" value="50" />
<int name="MaxSmsMessagesPerThread" value="500" />
2.2 功能体现
1)短信信息检查
首先我们想到在神马情况下检查短信的信息数,然后如果超过限制就删除掉旧的短信,答案是肯定的:当用户收到短息时,因为这时需要存储短信到数据库中,这时肯定会检查。下面请看短信收到后的检查实现:
private Uri storeMessage(Context context, SmsMessage[] msgs, int error) {
---------省略----
// Now make sure we're not over the limit in stored messages
Recycler.getSmsRecycler().deleteOldMessagesByThreadId(getApplicationContext(), threadId);
return insertedUri;
}
这时SmeReciverService当短信收到后会存储短信到数据库这里为了保证数据能正确存入;