android系统默认代码,MMS中可以添加email地址作为收件人,但是从Contacts中选择收件人时却不显示email。

解决思路:为了降低修改量,在原来只搜索phoneNum的基础上,再做一次查询搜索email不为空的联系人,然后将两次结果合并显示(用MergeCursor合并两次查询的cusor)。

com.android.contacts.editor.MultiPickContactActivity中修改。

private class QueryHandler extends AsyncQueryHandler {
protected WeakReference<MultiPickContactActivity> mActivity; public QueryHandler(Context context) {
super(context.getContentResolver());
mActivity = new WeakReference<MultiPickContactActivity>(
(MultiPickContactActivity) context);
} @Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
//add for mms pick email ---------------------------
if(request_from_mms && token != QUERY_TOKEN_FOR_MMS){
mmsCursor = cursor;
startQuery(QUERY_TOKEN_FOR_MMS, null, Email.CONTENT_URI, EMAILS_PROJECTION, null,
null, getSortOrder(EMAILS_PROJECTION));
return;
}//end add for mms pick email ----------------------- // In the case of low memory, the WeakReference object may be
// recycled.
if (mActivity == null || mActivity.get() == null) {
mActivity = new WeakReference<MultiPickContactActivity>(
MultiPickContactActivity.this);
}
final MultiPickContactActivity activity = mActivity.get();
//activity.mAdapter.changeCursor(cursor); //modified for mms pick email ------------
if (cursor == null || cursor.getCount() == 0) {
if (isPickCall()) {
//do nothing
} else if (!activity.mAdapter.mIsContentChanged) {
Toast.makeText(mContext, R.string.listFoundAllContactsZero, Toast.LENGTH_SHORT)
.show();
} else {
activity.mAdapter.mIsContentChanged = false;
}
} //add for mms pick email -----------------------------
if(request_from_mms && token == QUERY_TOKEN_FOR_MMS){
if(cursor!=null && cursor.getCount()!=0){
Cursor merCur = new MergeCursor(new Cursor[]{mmsCursor,cursor});
activity.mAdapter.changeCursor(merCur);
}else
activity.mAdapter.changeCursor(mmsCursor);
}else
activity.mAdapter.changeCursor(cursor);
//end add for mms pick email ---------------------------
}
}

经验证,此修改会引发新的问题——搜索框中输入字符搜索,然后清空搜索框,必现Contacts报错。

Process: com.android.contacts, PID: 13074
04-07 15:48:37.340: E/AndroidRuntime(13074): java.lang.IllegalArgumentException: column '_id' does not exist
04-07 15:48:37.340: E/AndroidRuntime(13074): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
04-07 15:48:37.340: E/AndroidRuntime(13074): at android.widget.CursorAdapter.swapCursor(CursorAdapter.java:342)
04-07 15:48:37.340: E/AndroidRuntime(13074): at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:313)
04-07 15:48:37.340: E/AndroidRuntime(13074): at com.android.contacts.editor.MultiPickContactActivity$ContactItemListAdapter.changeCursor(MultiPickContactActivity.java:1660)
04-07 15:48:37.340: E/AndroidRuntime(13074): at com.android.contacts.editor.MultiPickContactActivity$QueryHandler.onQueryComplete(MultiPickContactActivity.java:1419)

是MergeCursor调用getColumnIndexOrThrow("_id")出现报错,为什么"_id"会找不到呢?

public class MergeCursor extends AbstractCursor{
...... @Override
public String[] getColumnNames()
{
if (mCursor != null) { //----------- 如果这里mCursor为null, 就会导致ColumnNames中没有"_id"
return mCursor.getColumnNames();
} else {
return new String[0];
}
}
}
......
}

后续参考Contacts中关于“个人资料”和“联系人列表”一起显示的处理,和收藏界面(收藏,常用联系人一起显示)的处理。

MMS从Contacts中添加收件人显示email账号的更多相关文章

  1. PagerTabStrip在ViewPager的页面中添加标题显示

    package com.qf.day18_viewpager_demo_05; import java.util.ArrayList; import java.util.List; import an ...

  2. 在MFC对话框中添加状态栏

    如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图). 1. 首先,打开在资源视图的String Table并添加两个ID: ...

  3. ligerui_实际项目_003:form中添加数据,表格(grid)里面显示,最后将表格(grid)里的数据提交到servlet

    实现效果: "Form"中填写数据,向本页"Grid"中添加数据,转换成Json数据提交,计算总和,Grid文本框可编辑,排序 图片效果: 总结: //disp ...

  4. cocos2d-x 中添加显示文字的三种方式 LabelTTF 、LabelBMFont 和 LabelAtlas

    在 cocos2d-x 中有三个类可以在层或精灵中添加文字: LabelTTF LabelBMFont LabelAtlas LabelTTF 直接支持使用 TTF 字库,可以支持全部的中文,但是效率 ...

  5. cocos中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)

    CCLabelTTF CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OPENGL 纹理将会被创建..这意味着setString 和创建一个新的标签一样慢. 这个类使 ...

  6. Jmeter+Jenkins的聚合报告中添加QPS栏目显示

    1.进入jmeter/extras目录,修改 jmeter-results-detail-report_21.xsl   2.打开文件修改 如上所示,在文件中添加6个地方关于QPS的显示即可, 然后替 ...

  7. 给iOS项目中添加图片,并通过UIImageView引用和显示该UIImage图片

    [问题] 关于iOS/iPhone中的文件选择对话框,用于用户去选择图片等文件 过程中,问题转换为,需要给当前iOS项目中,添加一个图片. 类似于Windows开发中的资源文件,其中图片文件属于资源的 ...

  8. Jmeter+Jenkins的HTML报告中添加QPS、90%栏目显示

    1.进入jmeter/extras目录,修改 jmeter-results-detail-report_21.xsl   2.打开文件 在summary部分修改如下: 在pagelist部分修改如下: ...

  9. 一、SAP中添加一个模块到收藏夹后,显示事务代码

    一.在SAP中,如果添加一个模块到收藏夹,默认是看不到事务代码的,如图: 二.我们在附件->设置中勾选显示技术名称 三.保存之后,就会显示出事务代码,如图所示: 不忘初心,如果您认为这篇文章有价 ...

随机推荐

  1. Sublime Text使用中的一些心得

    Sublime Text3是每个web前端程序员的必备神器,其中有许多便利的功能及插件.下面列出一些在开发中比较实用的快捷操作,可以极大地提高代码的编写速度及效率. l  在文档中输入代码,即使忘记保 ...

  2. CSS实现禁止文字选中

    E10平台预览第四版中包含了对 CSS3 新属性 -ms-user-select 的支持,Web 开发人员可以利用这一新属性轻松精确的控制用户可以在网站上选择哪些文本. user-select:non ...

  3. jpa orderby

    return criteriaQuery.where(in).orderBy(new OrderImpl(root.get("field1"))).getRestriction() ...

  4. 织梦 列表页 list标签 按照自已设置的方式排序

    一.可以按照权重排序 降序排序 desc 1.添加的文章默认权重是自动加1,所以只要把想置顶的文章权重设置很高,如10000 2.{dede:list pagesize='12′ orderby='w ...

  5. 第九章 词典 (c)散列:散列函数

  6. const 全面理解

    问题1:const int a : 和  int  const  a :的区别 定义一个变量: 类型描述符 + 变量名 类型描述符包括类型修饰符和数据类型. 类型修饰符有:short  long  u ...

  7. 并查集和树的一些性质 hdu1325

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1325 题意是每次输入一对数字n,m表示一条树边,并且n是m的父亲,直到n==0&&m= ...

  8. unity3d休闲篮球类游戏《Flick Basketball 》上线项目完整源码

    下载地址: https://item.taobao.com/item.htm?id=576135964241

  9. 填坑专记-手脱FSG壳

      妈呀,脱FGS壳真的是坎坷颇多,多亏吾爱破解前辈们的帮忙.我一定要记录下来,省的以后再无法解决.   已经查看是FSG壳了.找到入口也容易了.重点就是脱壳并修复好它. 脱壳   OEP为:   使 ...

  10. swift - 高斯模糊

      /* case extraLight case light case dark @available(iOS 10.0, *) case regular @available(iOS 10.0, ...