解决:People下面选择分享可见联系人,选择多个联系人后通过短信分享,短信中只显示一个联系人
问题描述:
【操作步骤】:People下导入导出中选择分享可见联系人,选择多个联系人后通过短信分享
【测试结果】:短信中只能显示一个联系人
【预期结果】:可以显示多个联系人
经过代码分析,从compose_message_activitu.xml中的ViewStub进行定位到现实联系人名片的视图:
<ViewStub android:id="@+id/vcard_attachment_view_stub"
android:layout="@layout/vcard_attachment_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
经过上述代码,找到vcard_attachment_view的布局,并定位到现实联系人名片的预览视图:
<com.android.mms.ui.VcardAttachmentView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/vcard_attachment_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingRight="5dip"
android:background="@drawable/attachment_editor_bg">
根据ID我们定位到AttachmentEditor类的createView()方法,代码如下:
private SlideViewInterface createView() {
boolean inPortrait = inPortraitMode();
if (mSlideshow.size() > 1) {
return createSlideshowView(inPortrait);
}
SlideModel slide = mSlideshow.get(0);
if (slide.hasImage()) {
return createMediaView(
R.id.image_attachment_view_stub,
R.id.image_attachment_view,
R.id.view_image_button, R.id.replace_image_button, R.id.remove_image_button,
MSG_VIEW_IMAGE, MSG_REPLACE_IMAGE, MSG_REMOVE_ATTACHMENT);
} else if (slide.hasVideo()) {
return createMediaView(
R.id.video_attachment_view_stub,
R.id.video_attachment_view,
R.id.view_video_button, R.id.replace_video_button, R.id.remove_video_button,
MSG_PLAY_VIDEO, MSG_REPLACE_VIDEO, MSG_REMOVE_ATTACHMENT);
} else if (slide.hasAudio()) {
return createMediaView(
R.id.audio_attachment_view_stub,
R.id.audio_attachment_view,
R.id.play_audio_button, R.id.replace_audio_button, R.id.remove_audio_button,
MSG_PLAY_AUDIO, MSG_REPLACE_AUDIO, MSG_REMOVE_ATTACHMENT);
} else if (slide.hasVcard()) {
return createMediaView(R.id.vcard_attachment_view_stub,
R.id.vcard_attachment_view,
R.id.view_vcard_button,
R.id.replace_vcard_button,
R.id.remove_vcard_button,
MSG_VIEW_VCARD, MSG_REPLACE_VCARD, MSG_REMOVE_ATTACHMENT);
} else if (slide.hasUnsupport()) {
return createMediaView(R.id.unsupport_attachment_view_stub,
R.id.unsupport_attachment_view,
R.id.view_unsupport_button,
R.id.replace_unsupport_button,
R.id.remove_unsupport_button,
MSG_VIEW_VCARD, MSG_REPLACE_VCARD, MSG_REMOVE_ATTACHMENT);
} else {
throw new IllegalArgumentException();
}
}
经过分析,我们发现,通过调用createMediaView()方法,并在该方法中绑定点击时间的监听 viewButton.setOnClickListener(new MessageOnClick(view_message));通过点击发送消息给Handler,而setHandler的操作放在了ComposeMessageActivity类中。我们接着分析ComposeMessageActivity类中的Handler对象的handleMessage()方法:<TAG 1-1>
private final Handler mAttachmentEditorHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case AttachmentEditor.MSG_EDIT_SLIDESHOW: {
editSlideshow();
break;
}
case AttachmentEditor.MSG_SEND_SLIDESHOW: {
if (isPreparedForSending()) {
ComposeMessageActivity.this.confirmSendMessageIfNeeded();
}
break;
}
case AttachmentEditor.MSG_VIEW_IMAGE:
case AttachmentEditor.MSG_PLAY_VIDEO:
case AttachmentEditor.MSG_PLAY_AUDIO:
case AttachmentEditor.MSG_PLAY_SLIDESHOW:
case AttachmentEditor.MSG_VIEW_VCARD:
if (mWorkingMessage.getSlideshow() != null) {
viewMmsMessageAttachment(msg.what);
}
break;
case AttachmentEditor.MSG_REPLACE_IMAGE:
case AttachmentEditor.MSG_REPLACE_VIDEO:
case AttachmentEditor.MSG_REPLACE_AUDIO:
showAddAttachmentDialog(true);
break;
//AddBy:yabin.huang BugID:SWBUG00029664 Date:20140528
case AttachmentEditor.MSG_REPLACE_VCARD:
pickContacts(MultiPickContactsActivity.MODE_VCARD,REQUEST_CODE_ATTACH_ADD_CONTACT_VCARD);
break;
case AttachmentEditor.MSG_REMOVE_ATTACHMENT:
mWorkingMessage.removeAttachment(true);
mAttachFileUri = null;
mIsSendMultiple = false;
break;
default:
break;
}
}
};
上述代码中<TAG 1-1>,调用viewMmsMessageAttachment()方法:
public static void viewSimpleSlideshow(Context context, SlideshowModel slideshow) {
if (!slideshow.isSimple()) {
throw new IllegalArgumentException(
"viewSimpleSlideshow() called on a non-simple slideshow");
}
SlideModel slide = slideshow.get(0);
MediaModel mm = null;
if (slide.hasImage()) {
mm = slide.getImage();
} else if (slide.hasVideo()) {
mm = slide.getVideo();
} else if (slide.hasVcard()) {
mm = slide.getVcard();
String lookupUri = ((VcardModel) mm).getLookupUri();
Intent intent = new Intent(Intent.ACTION_VIEW);
if (!TextUtils.isEmpty(lookupUri) && lookupUri.contains("contacts")) {
// if the uri is from the contact, we suggest to view the contact.
intent.setData(Uri.parse(lookupUri));
} else {
// we need open the saved part.
intent.setDataAndType(mm.getUri(), ContentType.TEXT_VCARD.toLowerCase());
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
// distinguish view vcard from mms or contacts.
intent.putExtra(VIEW_VCARD, true);
context.startActivity(intent);
return;
}
上述加粗标红代码进行注释,则问题解决。这么处理的原因,无论当前lookruUri中包含几个联系人或者无论从那里跳转查看名片附件的内容都跳转到mm.getUri()所表示的uri去。当然这样的处理还有待改善,由于时间问题这里暂作处理,以后如果有时间进行完善。
解决:People下面选择分享可见联系人,选择多个联系人后通过短信分享,短信中只显示一个联系人的更多相关文章
- Excel在任务栏中只显示一个窗口的解决办法
Excel在任务栏中只显示一个窗口的解决办法 以前朋友遇到过这个问题,这次自己又遇到了,习惯了以前的那种在任务栏中显示全部窗口,方便用Alt+Tab键进行切换. 如果同时打开许多Excel工作簿, ...
- win7系统的右键菜单只显示一个白色框不显示菜单项 解决办法
如上图所示,桌面或其他大部分地方点击右键菜单,都只显示一个白色框,鼠标移上去才有菜单项看,并且效果很丑 解决办法: 计算机-右键-属性-高级-性能-设置-视觉效果-淡入淡出或滑动菜单到视图,将其前面的 ...
- 虚拟机中安装完Lunix系统后,开机黑屏,只显示一个-,解决方法
1,查看设置->硬盘是不是SCSI,如果是,先关闭虚拟机,移除该硬盘(实际数据不会删除) 2,添加一个新的虚拟硬盘,最后位置选IDE设备 3,确定,重启虚拟机即可
- 解决ListView在界面只显示一个item
ListView只显示一条都是scrollview嵌套listView造成的,将listView的高度设置为固定高度之后,三个条目虽然都完全显示.但是这个地方是动态显示的,不能写死.故采用遍历各个子条 ...
- 如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”
.选择文件[XP操作系统,不能用于Win2000或98],使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框 Set objDialog = Crea ...
- 解决Windows照片查看器中图片显示发黄的问题
这其实是ICC颜色配置的问题,发生在Windows7自动更新下载了显示器的驱动后,自动安装后显示器的颜色配额制文件自动改为新下载的配置,导致显卡和显示器颜色配置不兼容的问题,不过不用担心,非常容易解决 ...
- 【Android Developers Training】 101. 显示快速联系人挂件(Quick Contact Badge)
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【转】【已解决】Android中ActionBar中不显示overflow(就是三个点的那个按钮)--不错
原文网址:http://www.crifan.com/android_actionbar_three_dot_overflow_not_show/ [问题] 折腾: [记录]继续尝试给Android程 ...
- iOS-调用系统的短信和发送邮件功能,实现短信分享和邮件分享
一.邮件分享 1.iOS系统自带邮件设置邮箱(此处以QQ邮箱为例)(http://jingyan.baidu.com/album/6181c3e084cb7d152ef153b5.html?picin ...
随机推荐
- U盘中病毒了怎么办
声明: 该方案仅是我处理自己U盘的心得,如果您看到这篇文件,并使用此方法,有任何数据丢失或者损失,我概不负责 问题: U盘里面显示占用了空间,就是看不到文件,或者仅有一两个自己不认识的文件 处理方案: ...
- HDU 2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=2243 题意: 给出m个模式串,求长度不超过n的且至少包含一个模式串的字符串个数. 思路: 如果做过poj2778 ...
- hdu 4352 XHXJ's LIS 数位dp+状态压缩
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others ...
- python2 安装scrapy出现错误提示解决办法~
首先:set STATICBUILD=true && pip install lxml 安装环境: windows7操作系统,已经正确安装python,pip. 使用pip功能安装Sc ...
- 在线客服 分享 qq 一键加好友 一键入群
1.在线客服 <a href="tencent://message/?uin=qqnum&Site=&menu=yes">qq客服</a> ...
- 【Golang 接口自动化03】 解析接口返回XML
上一篇我们学习了怎么发送各种数据类型的http请求,这一篇我们来介绍怎么来解析接口返回的XML的数据. 解析接口返回数据 定义结构体 假设我们现在有一个接口返回的数据resp如下: <?xml ...
- Java设计模式(五)——适配器模式
先举一个例子解释一下生活中的适配器模式:公司老总要求工程部经理来汇报一下公司内部的消防设备使用和维护情况.接到通知后,工程部经理老宋找了专门负责消防设备统计的维护人员小王,请他调出了去年全年的维护记录 ...
- rxjs学习
推荐一个好的网站:http://cn.rx.js.org/manual/overview.html#- https://rxjs-cn.github.io/learn-rxjs-operators/o ...
- 枚举1--求小于n的最大素数
枚举1--求小于n的最大素数 总结: 素数是不能被比它小的素数整除. /* 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计 ...
- 雷林鹏分享:C# 索引器(Indexer)
C# 索引器(Indexer) 索引器(Indexer) 允许一个对象可以像数组一样被索引.当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样.您可以使用数组 ...