彩信设置
1、前言
关于彩信的设置,主要相关设置项为发送报告、已读报告、自动接收附件。这几个选项对于用户来说非常重要,例如自动接收,如果用户打开了,这样一来彩信一接收就会自动去下载,这样会带来什么问题了,现在有很多垃圾彩信,用户不希望耗费流量去接收,所以用户就必须关掉该项功能。下面请看其设置主界面:
![](https://img-my.csdn.net/uploads/201211/20/1353411929_3708.png)
图1 彩信设置界面
2、功能解析
2.1 传送报告、已读报告
该项和短信的传送报告类似,它是在那是用的了??
在短信和彩信的发送是在WorkingMessage的send方法中进行分家的,短信会调用sendSmsWork,彩信会调用sendMmsWork方法;这里彩信的设置肯定也是和该法脱不了关系;sendMmswork会调用updatePreferencesHeaders()方法,这里了就是对于彩信头的包装,
在短信和彩信的发送是在WorkingMessage的send方法中进行分家的,短信会调用sendSmsWork,彩信会调用sendMmsWork方法;这里彩信的设置肯定也是和该法脱不了关系;sendMmswork会调用updatePreferencesHeaders()方法,这里了就是对于彩信头的包装,
// Update the headers which are stored in SharedPreferences.
private void updatePreferencesHeaders(SendReq sendReq) throws MmsException {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
// Expiry.
sendReq.setExpiry(prefs.getLong(
MessagingPreferenceActivity.EXPIRY_TIME, DEFAULT_EXPIRY_TIME));
// Priority.
sendReq.setPriority(prefs.getInt(MessagingPreferenceActivity.PRIORITY, DEFAULT_PRIORITY));
// Delivery report.传送报告
boolean dr = prefs.getBoolean(MessagingPreferenceActivity.MMS_DELIVERY_REPORT_MODE,
DEFAULT_DELIVERY_REPORT_MODE);
sendReq.setDeliveryReport(dr?PduHeaders.VALUE_YES:PduHeaders.VALUE_NO);
// Read report.已读报告
boolean rr = prefs.getBoolean(MessagingPreferenceActivity.READ_REPORT_MODE,
DEFAULT_READ_REPORT_MODE);
sendReq.setReadReport(rr?PduHeaders.VALUE_YES:PduHeaders.VALUE_NO);
}
可以看到这里对传送报告和已读报告都在这里进行值的设置。
2.2 自动接收附件
这里大致分为两种是一般彩信的接收、漫游,本文对漫游自动接收彩信不做分析,对于一般彩信的接收问题进行简单的分析。大家知道彩信接收的时候会用一条短信来通知用户,这时如果短信通知后根据是否自动下载区做下载动作,如果没有开启自动下载功能,程序不会去下载,用户可以通过界面手动下载。其下载的具体动作在NotificationTransaction类中;
public void run() {
DownloadManager downloadManager = DownloadManager.getInstance();
boolean autoDownload = downloadManager.isAuto();
boolean dataSuspended = (MmsApp.getApplication().getTelephonyManager().getDataState() ==
TelephonyManager.DATA_SUSPENDED);
// By default, we set status to STATUS_DEFERRED because we
// should response MMSC with STATUS_DEFERRED when we cannot
// download a MM immediately.
int status = STATUS_DEFERRED;
// Don't try to download when data is suspended, as it will fail, so defer download
if (!autoDownload || dataSuspended) {
downloadManager.markState(mUri, DownloadManager.STATE_UNSTARTED);
sendNotifyRespInd(status);
return;
}
downloadManager.markState(mUri, DownloadManager.STATE_DOWNLOADING);
...............................................................
大家可以看出在此会根据用户设置的值来判断是否需要自动下载。