最近,在看android 的email ,使用中发现其有2个不足:
1.转发邮件不能带附件
可以如下修改: 在MessageCompose.java中加入如下方法
private boolean loadAttachments(Message message, int depth) {
try {
Attachment[] attachments = Attachment
.restoreAttachmentsWithMessageId(this, message.mId);
for (final Attachment attachment : attachments) {
mHandler.post(new Runnable() {
public void run() {
if(null!=attachment.mContentUri){
Uri aUri = Uri.parse(attachment.mContentUri);
if(null!=aUri){
addAttachment(aUri);
}
}
}
});
}
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
并且在 processSourceMessage方法中打开如下代码:
if (!loadAttachments(message, 0)) {
mHandler.sendEmptyMessage(MSG_SKIPPED_ATTACHMENTS);
}
其在转发时可能需要修改下载在转发附件代码
1.2
在MessageCompose.java中添加这2个方法:
private boolean findAttachmentWithMessageId(Context context,long messageId){
Uri uri = ContentUris.withAppendedId(Attachment.MESSAGE_ID_URI,messageId);
Cursor c = context.getContentResolver().query(uri,Attachment.CONTENT_PROJECTION,null,null,null);
boolean allAttachmentsDownload = true;
try{
int count = c.getCount();
for(int i = 0;i<count;++i){
c.moveToNext();
final Attachment attachment = new Attachment();
attachment.mFileName = c.getString(Attachment.CONTENT_FILENAME_COLUMN);
attachment.mContentUri = c.getString(Attachment.CONTENT_CONTENT_URI_COLUMN);
attachment.mSize = c.getLong(Attachment.CONTENT_SIZE_COLUMN);
attachment.mMimeType = c.getString(Attachment.CONTENT_MIME_TYPE_COLUMN);
if(attachment.mContentUri == null){
allAttachmentsDownload = false;
continue;
}
mHandler.post(new Runnable(){
public void run() {
addAttachment(attachment);
}
});
}
}finally {
c.close();
}
return allAttachmentsDownload;
}
private boolean loadAttachments(Message message,Context context){
return findAttachmentWithMessageId(context,message.mId);
}
在processSourceMessage()方法里面:else if(ACTION_FORWARD.equals(mAction))下
if(!loadAttachments(message,MessageCompose.this)){
mHandler.sendEmaptyMessage(MSG_SKIPPED_ATTACHMENTS);
}代码方开。
将MessagingController.java文件
loadAttachment方法里面的:
pruneCachedAttachments(accountId);注掉
2.转发含原邮件
MessageCompose.java转发中加入
if(mSource.mHtml!=null){
message.mHtml = "<br><div>"+message.mText+"</div><br><div>"+message.mIntroText+"</div><br>"+mSource.mHtml;
message.mIntroText= message.mHtml;
message.mText = null;
}
Rfc822Output.java中对writeTextWithHeaders方法改造:
if(ISFORWORD){//全局变量,定义是否转发
writeHeader(writer, "Content-Type", "text/html; charset=utf-8"); //发送html格式eamil
}else{
writeHeader(writer, "Content-Type", "text/plain; charset=utf-8");
}
可能有不足,互相交流