添加联系人信息
public class AddContactActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_contact);
}
public void addContact(View view){
//1.获得联系人对外暴露的地址
Uri uri = Uri.parse("content://com.android.contacts/raw_contact");
//2.获得联系人对外暴露的数据地址
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor cursor = getContentResolver().query(dataUri, null, null, null, null);
//3.为什么要移动到最后,因为添加数据都在最后添加
cursor.moveToLast();
long id = cursor.getLong(cursor.getColumnIndex("_id"));
//4.每添加一条数据就产生一个新的id
long newId = id + 1;
ContentValues values = new ContentValues();
values.put("contact_id", newId);
getContentResolver().insert(uri, values);
//插入电话
ContentValues pvalues = new ContentValues();
pvalues.put("raw_contact_id", newId);
pvalues.put("mimeType", "vnd.android.cursor.item/phone_v2");
pvalues.put("data1", "88888888888");
//插入邮件
ContentValues evalues = new ContentValues();
evalues.put("raw_contact_id", newId);
evalues.put("mimeType", "vnd.android.cursor.item/email_v2");
evalues.put("data1", "kk@tom.com");
//插入名称
ContentValues nvalues = new ContentValues();
nvalues.put("raw_contact_id", newId);
nvalues.put("mimeType", "vnd.android.cursor.item/name");
nvalues.put("data1", "黎明");
getContentResolver().insert(dataUri, nvalues);
}
}
实体类
public class ContactInfo implements Parcelable {
public String name;
public String number;
public ContactInfo(){}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(number);
}
public static final Parcelable.Creator<ContactInfo> CREATOR = new Parcelable.Creator<ContactInfo>() {
public ContactInfo createFromParcel(Parcel in) {
return new ContactInfo(in);
}
public ContactInfo[] newArray(int size) {
return new ContactInfo[size];
}
};
private ContactInfo(Parcel in) {
name = in.readString();
number = in.readString();
}
}
查询工具类
public class ContactService {
public static List<ContactInfo> getContactInfos(Context context){
List<ContactInfo> contactInfos = new ArrayList<ContactInfo>();
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor cursor = context.getContentResolver().query(uri, new String[]{"contact_id"}, null, null, null);
while(cursor.moveToNext()){
long contact_id = cursor.getLong(cursor.getColumnIndex("contact_id"));
Cursor dataCursor = context.getContentResolver().query(dataUri, new String[]{"data1","mimeType"}, "raw_contact_id", new String[]{contact_id + ""}, null);
while(dataCursor.moveToNext()){
String data1 = dataCursor.getString(dataCursor.getColumnIndex("data1"));
String mimeType = dataCursor.getString(dataCursor.getColumnIndex("mimeType"));
ContactInfo info = new ContactInfo();
if ("vnd.android.cursor.item/name".equals(mimeType)) {
info.name = data1;
}else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) {
info.number = data1;
}
contactInfos.add(info);
}
dataCursor.close();
}
cursor.close();
return contactInfos;
}
}
查询联系人
public class QueryContactActivity extends BaseActivity {
protected static final String CONTACTS = "contacts";
protected static final int RESULTCODE = 0x00;
private ListView mListView;
private List<ContactInfo> mDatas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_query_contact);
initDatas();
initViews();
initEvents();
}
private void initEvents() {
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(QueryContactActivity.this, GetContactActivity.class);
//Bundle bundle = new Bundle();
//bundle.putParcelable(CONTACTS, mDatas.get(position));
intent.putExtra(CONTACTS, mDatas.get(position));
setResult(RESULTCODE, intent);
finish();
}
});
}
private void initViews() {
mListView = (ListView) findViewById(R.id.listView1);
mListView.setAdapter(new BasicAdapter<ContactInfo>(this, mDatas, R.layout.item_contact) {
@Override
public void fillView(ViewHolder holder, ContactInfo info) {
TextView tvName = holder.getView(R.id.tv_name);
tvName.setText(info.name);
TextView tvNumber = holder.getView(R.id.tv_number);
tvNumber.setText(info.number);
}
});
}
private void initDatas() {
mDatas = new ArrayList<ContactInfo>();
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor cursor = getContentResolver().query(uri, new String[]{"contact_id"}, null, null, null);
while(cursor.moveToNext()){
long contact_id = cursor.getLong(cursor.getColumnIndex("contact_id"));
Cursor dataCursor = getContentResolver().query(dataUri, new String[]{"data1","mimeType"}, "raw_contact_id", new String[]{contact_id + ""}, null);
while(dataCursor.moveToNext()){
String data1 = dataCursor.getString(dataCursor.getColumnIndex("data1"));
String mimeType = dataCursor.getString(dataCursor.getColumnIndex("mimeType"));
ContactInfo info = new ContactInfo();
if ("vnd.android.cursor.item/name".equals(mimeType)) {
info.name = data1;
}else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) {
info.number = data1;
}
mDatas.add(info);
}
dataCursor.close();
}
cursor.close();
}
}
点击后展示联系人信息
public class GetContactActivity extends Activity {
private static final int REQUESTCODE = 0x11;
private EditText mName;
private EditText mNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_getcontact);
initViews();
}
private void initViews() {
mName = (EditText) findViewById(R.id.editText1);
mNumber = (EditText) findViewById(R.id.editText1);
}
public void queryContact(View view){
Intent intent = new Intent(this, QueryContactActivity.class);
startActivityForResult(intent, REQUESTCODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
//Bundle bundle = data.getExtras();
//ContactInfo info = (ContactInfo) bundle.get(QueryContactActivity.CONTACTS);
if (requestCode == REQUESTCODE && resultCode == QueryContactActivity.RESULTCODE) {
ContactInfo info = data.getParcelableExtra(QueryContactActivity.CONTACTS);
mName.setText(info.name);
mNumber.setText(info.number);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}