Android官方API Demo学习之联系人获取
/**
* Android API Demos之获取手机联系人
*
* @description:
* @author ldm
* @date 2016-4-19 上午10:28:27
*/
public class MainActivity extends ListActivity {
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID, // 联系人ID
Contacts.DISPLAY_NAME, // 联系人展示名
Contacts.STARRED, // 表示该联系人是用星号标记的,即favorite的联系人;0表示没有用星号标记
Contacts.TIMES_CONTACTED, // 联系人被联系的次数
Contacts.CONTACT_PRESENCE, // 联系人呈现出来的状态,如离线、在线、忙碌等状态
Contacts.PHOTO_ID, // 联系人头像id
Contacts.LOOKUP_KEY, // 联系人的查询键
Contacts.HAS_PHONE_NUMBER, // 0or1:如果值为1,则该联系人至少有一个电话号码;如果值为0,则该联系人没有电话号码
};
static final int SUMMARY_ID_COLUMN_INDEX = 0;
static final int SUMMARY_NAME_COLUMN_INDEX = 1;
static final int SUMMARY_STARRED_COLUMN_INDEX = 2;
static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;
static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;
static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;
static final int SUMMARY_LOOKUP_KEY = 6;
static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ Contacts.DISPLAY_NAME + " != '' ))";
Cursor c = getContentResolver().query(Contacts.CONTENT_URI,
CONTACTS_SUMMARY_PROJECTION, select, null,
Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
startManagingCursor(c);
ContactListItemAdapter adapter = new ContactListItemAdapter(this,
R.layout.item_layout, c);
setListAdapter(adapter);
}
/**
* 继承ResourceCursorAdapter通过指定一个定义了视图UI的XML文件来创建视图。
*
* @description:
* @author ldm
* @date 2016-4-19 上午10:28:39
*/
private final class ContactListItemAdapter extends ResourceCursorAdapter {
public ContactListItemAdapter(Context context, int layout, Cursor c) {
super(context, layout, c, true);
}
/**
* 给View设置数据
*/
@Override
public void bindView(View view, Context context, Cursor cursor) {
final ViewHolder cache = (ViewHolder) view
.getTag();
//在缓冲区中检索请求的列的文本,将将其存储
cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX,
cache.nameBuffer);
int size = cache.nameBuffer.sizeCopied;
cache.nameView.setText(cache.nameBuffer.data, 0, size);
final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);
final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);
cache.photoView.assignContactUri(Contacts.getLookupUri(contactId,
lookupKey));
}
/**
* 根据指定的xml文件创建视图
*/
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = super.newView(context, cursor, parent);
ViewHolder cache = new ViewHolder();
cache.nameView = (TextView) view.findViewById(R.id.name);
cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge);
view.setTag(cache);
return view;
}
}
final static class ViewHolder {
public TextView nameView;
public QuickContactBadge photoView;
public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);
}
}
item布局:
<QuickContactBadge
android:id="@+id/badge"
style="?android:attr/quickContactBadgeStyleWindowSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="3dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="14dip"
android:layout_marginTop="4dip"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/badge"
android:paddingLeft="2dip"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>