一步一步学android控件(之二十六)—— QuickContacBadge
来源:互联网 发布:js ajax push 编辑:程序博客网 时间:2024/06/05 15:17
QuickContacBadge译为联系人快捷标识,用于显示一张图片,点击该图后弹出相关的快捷功能,如打电话、发短信等。
QuickContacBadge提供了三个方法指定联系人的信息:
1、assignContactUri(Uri contactUri) : 联系人Uri
2、assignContactFromPhone(String phonNumber,boolean lazyLookup) : 从电话号码加载联系人信息。phonNumber: 电话号码 ;lazyLookup:是否延迟加载。注:这个方法应该只在不知道联系人uri的情况下使用(该方法会多做一次查询)。
3、assignContactFromEmail(String emailAddress, boolean lazyLookup):从邮箱号码加载联系人信息。 emailAddress:邮箱地址; lazyLookup:是否延迟加载。
assignContactFromPhone(String phonNumber,boolean lazyLookup) 的源码如下:
public void assignContactFromPhone(String phoneNumber, boolean lazyLookup) { mContactPhone = phoneNumber; if (!lazyLookup) { mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP, null, Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone), PHONE_LOOKUP_PROJECTION, null, null, null); } else { mContactUri = null; onContactUriChanged(); } }可以看到如果是lazyLookup为false,则立即加载信息。
通过源码:
@Override public void onClick(View v) { if (mContactUri != null) { QuickContact.showQuickContact(getContext(), QuickContactBadge.this, mContactUri, QuickContact.MODE_LARGE, mExcludeMimes); } else if (mContactEmail != null) { mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP_AND_TRIGGER, mContactEmail, Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(mContactEmail)), EMAIL_LOOKUP_PROJECTION, null, null, null); } else if (mContactPhone != null) { mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP_AND_TRIGGER, mContactPhone, Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone), PHONE_LOOKUP_PROJECTION, null, null, null); } else { // If a contact hasn't been assigned, don't react to click. return; } }可以看到,当用户点击后是通过一个handler去加载数据的,QueryHandler的代码如下:
private class QueryHandler extends AsyncQueryHandler { public QueryHandler(ContentResolver cr) { super(cr); } @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { Uri lookupUri = null; Uri createUri = null; boolean trigger = false; try { switch(token) { case TOKEN_PHONE_LOOKUP_AND_TRIGGER: trigger = true; createUri = Uri.fromParts("tel", (String)cookie, null); //$FALL-THROUGH$ case TOKEN_PHONE_LOOKUP: { if (cursor != null && cursor.moveToFirst()) { long contactId = cursor.getLong(PHONE_ID_COLUMN_INDEX); String lookupKey = cursor.getString(PHONE_LOOKUP_STRING_COLUMN_INDEX); lookupUri = Contacts.getLookupUri(contactId, lookupKey); } break; } case TOKEN_EMAIL_LOOKUP_AND_TRIGGER: trigger = true; createUri = Uri.fromParts("mailto", (String)cookie, null); //$FALL-THROUGH$ case TOKEN_EMAIL_LOOKUP: { if (cursor != null && cursor.moveToFirst()) { long contactId = cursor.getLong(EMAIL_ID_COLUMN_INDEX); String lookupKey = cursor.getString(EMAIL_LOOKUP_STRING_COLUMN_INDEX); lookupUri = Contacts.getLookupUri(contactId, lookupKey); } break; } } } finally { if (cursor != null) { cursor.close(); } } mContactUri = lookupUri; onContactUriChanged(); if (trigger && lookupUri != null) { // Found contact, so trigger QuickContact QuickContact.showQuickContact(getContext(), QuickContactBadge.this, lookupUri, QuickContact.MODE_LARGE, mExcludeMimes); } else if (createUri != null) { // Prompt user to add this person to contacts final Intent intent = new Intent(Intents.SHOW_OR_CREATE_CONTACT, createUri); getContext().startActivity(intent); } } }
下面是个简单的使用QuickContacBadge的示例,首先看看效果:
1、widget_quick_contact_alyout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <QuickContactBadge android:id="@+id/show_quick_contact" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="30dp" android:src="@drawable/quick_contact" /></LinearLayout>
2、activity——WidgetQuickContactActivity.java
package com.xy.zt.selfdefinewieget;import android.app.Activity;import android.os.Bundle;import android.widget.QuickContactBadge;public class WidgetQuickContactActivity extends Activity { private QuickContactBadge mQcb; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.widget_quick_contact_alyout); init(); } private void init() { mQcb = (QuickContactBadge) findViewById(R.id.show_quick_contact); mQcb.assignContactFromPhone("02885322828", true); }}
3、在ViewData.java中添加如下代码(此部分内容可选),若有不清楚的地方参见 一步一步学android控件(之一) —— 开始篇
public static final int QUICK_CONTACT_BADGE_ID = SEEK_BAR_ID + 1; public static final String QUICK_CONTACT_BADGE_NAME = "QuickContactBadge";private static final ViewData mQuickContact = new ViewData(QUICK_CONTACT_BADGE_NAME, QUICK_CONTACT_BADGE_ID);View_Datas.add(mQuickContact);WidgetAdapter的handleItemClicked方法中添加如下代码:
case ViewData.QUICK_CONTACT_BADGE_ID: intent.setClass(mContext, WidgetQuickContactActivity.class); mContext.startActivity(intent); break;
- 一步一步学android控件(之二十六)—— QuickContacBadge
- 一步一步学android控件(之十六)—— CheckBox
- android控件 —— QuickContacBadge
- 一步一步学android控件(之二) —— TextView
- 一步一步学android控件(之二十)—— ScrollView & HorizontalScrollView
- 一步一步学android控件(之二十一)—— ListView & ExpandableListView
- 一步一步学android控件(之二十二)—— GridView
- 一步一步学android控件(之二十三)—— ProgressBar
- 一步一步学android控件(之二十四)—— RatingBar
- 一步一步学android控件(之二十五)—— SeekBar
- 一步一步学android控件(之二十七)—— SlidingDrawer
- 一步一步学android控件(之二十八)—— ViewFlipper
- 一步一步学android控件(之二十九)—— SearchView
- 一步一步学android控件(之三) —— Button
- 一步一步学android控件(之四) —— EditText
- 一步一步学android控件(之五) —— AutoCompleteTextView
- 一步一步学android控件(之六) —— MultiAutoCompleteTextView
- 一步一步学android控件(之七) —— Toast
- 最常被程序员们谎称读过的计算机书籍
- visual studio 智能提示 关闭、启动
- shell:求某个数以内的所有完全数
- FLAG_KEEP_SCREEN_ON是让屏幕保持不暗
- 黑马程序员_java Properties与序列流篇Day5
- 一步一步学android控件(之二十六)—— QuickContacBadge
- 中国佛学66句震撼世界的禅语
- NSNumber的用法
- JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
- js实现全选和反选功能
- What's the difference between Quartz Core, Core Graphics and Quartz 2D?
- 并发冲突域
- BASE64Encoder解码
- sp_send_dbmail 存储过程发送邮件