`

Android通信录

 
阅读更多

数据是应用的核心(该话不是我说的,某本书上看到的),在Android的
应用程序中我们经常需要调用通信录,比如给联系人发送贺卡,发送Email。
我们已经知道可以通过ContentProvider去拿到数据,但是其uri如何得到呢。
这就需要我们去查看文档,但是Android开发者指南已经很久没有更新过了,
上面的URI有很多也是错误的,我们必须通过自己查看源文件来找到uri,
然后才可以拿到正确的数据。

以下代码是通过测试类来测试该方法,注释里的部分是通过ContactsContract.Contacts
这个类里的常量获取uri以及id。
而方法中确实通过查看SQLite来获取字段的

package com.sina.contacts;

import java.util.ArrayList;

import android.content.ContentProviderOperation<wbr>;<br> import android.content.ContentProviderResult;<br> import android.content.ContentResolver;<br> import android.content.ContentUris;<br> import android.content.ContentValues;<br> import android.database.Cursor;<br> import android.net.Uri;<br> import android.provider.ContactsContract;<br> import android.provider.ContactsContract.RawContacts;<br> import android.provider.ContactsContract.CommonDataKinds.Email;<br> import android.provider.ContactsContract.CommonDataKinds.Phone;<br> import android.provider.ContactsContract.CommonDataKinds.StructuredName;<br> import android.provider.ContactsContract.Contacts.Data;<br> import android.test.AndroidTestCase;<br> import android.util.Log;</wbr>

public class ContactsTest extends AndroidTestCase {

<wbr>public static final String TAG = "ContactsTest";</wbr>

<wbr><br><wbr><wbr> StringBuffer sb=new StringBuffer();<br><wbr><wbr><br><wbr><wbr> public void testGetAllContacts()throws Exception{<br><wbr><wbr> ContentResolver cr =this.getContext().getContentResolver();<br><wbr><wbr> Uri uri=ContactsContract.Contacts.CONTENT_URI;<br><wbr><wbr> Cursor cursor = cr.query(uri,null, null, null, null);<br><wbr><wbr> while(cursor.moveToNext()){<br><wbr><wbr> String contactId =cursor.getString(cursor.getColumnIndex("_id"));<br><wbr><wbr> String contactName =cursor.getString(cursor.getColumnIndex("display_name"));<br><wbr><wbr> sb.append(contactId).append(","+contactName+",");<br><wbr><wbr><br><wbr><wbr> Uri phoneUri=Uri.parse("content://com.android.contacts/data/phones");<br><wbr><wbr> Cursor phoneCursor = cr.query(phoneUri, null, "raw_contact_id=?", new String[]{contactId}, null);<br><wbr><wbr> while(phoneCursor.moveToNext()){<br><wbr><wbr><wbr> String phoneNumber=phoneCursor.getString(phoneCursor.getColumnIndex("data1"));<br><wbr><wbr><wbr> sb.append(phoneNumber+",");<br><wbr><wbr> }<br><wbr><wbr><br><wbr><wbr> Uri emailUri=Uri.parse("content://com.android.contacts/data/emails");<br><wbr><wbr> Cursor emailCursor=cr.query(emailUri, null, "raw_contact_id="+contactId, null, null);<br><wbr><wbr> while(emailCursor.moveToNext()){<br><wbr><wbr><wbr> String email = emailCursor.getString(emailCursor.getColumnIndex("data1"));<br><wbr><wbr><wbr> sb.append(email+". ");<br><wbr><wbr> }<br><wbr><wbr> }<br><wbr><wbr> Log.i(TAG, sb.toString());<br><wbr><wbr> }<br><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><br><wbr><br><wbr><br><wbr>public void testInsert() {<br><wbr> ContentValues values = new ContentValues();<br><wbr><br><wbr><br><wbr> Uri rawContactUri = this.getContext().getContentResolver().insert(<br><wbr><wbr><wbr> RawContacts.CONTENT_URI, values);<br><wbr> long rawContactId = ContentUris.parseId(rawContactUri);<br><wbr> // 往data表入姓名数据<br><wbr> values.clear();<br><wbr> values.put(Data.RAW_CONTACT_ID, rawContactId);<br><wbr> values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);// 内容类型<br><wbr> values.put(StructuredName.GIVEN_NAME, "李天山");<br><wbr> this.getContext().getContentResolver().insert(<br><wbr><wbr><wbr> android.provider.ContactsContract.Data.CONTENT_URI, values);<br><wbr> // 往data表入电话数据<br><wbr> values.clear();<br><wbr> values.put(Data.RAW_CONTACT_ID, rawContactId);<br><wbr> values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);<br><wbr> values.put(Phone.NUMBER, "13921009789");<br><wbr> values.put(Phone.TYPE, Phone.TYPE_MOBILE);<br><wbr> this.getContext().getContentResolver().insert(<br><wbr><wbr><wbr> android.provider.ContactsContract.Data.CONTENT_URI, values);<br><wbr> // 往data表入Email数据<br><wbr> values.clear();<br><wbr> values.put(Data.RAW_CONTACT_ID, rawContactId);<br><wbr> values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);<br><wbr> values.put(Email.DATA, "<a href="mailto:liming@itcast.cn">liming@itcast.cn</a>");<br><wbr> values.put(Email.TYPE, Email.TYPE_WORK);<br><wbr> this.getContext().getContentResolver().insert(<br><wbr><wbr><wbr> android.provider.ContactsContract.Data.CONTENT_URI, values);<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>// 批量添加,处于同一个事务中<br><wbr>public void testSave() throws Throwable {<br><wbr> // 文档位置:reference\android\provider\ContactsContract.RawContacts.html<br><wbr> ArrayList&lt;ContentProviderOperation<wbr>&gt; ops = new ArrayList&lt;ContentProviderOperation<wbr>&gt;();<br><wbr> int rawContactInsertIndex = ops.size();<br><wbr> ops.add(ContentProviderOperation<wbr>.newInsert(RawContacts.CONTENT_URI)<br><wbr><wbr><wbr> .withValue(RawContacts.ACCOUNT_TYPE, null).withValue(<br><wbr><wbr><wbr><wbr><wbr> RawContacts.ACCOUNT_NAME, null).build());<br><wbr> // 文档位置:reference\android\provider\ContactsContract.Data.html<br><wbr> ops.add(ContentProviderOperation<wbr>.newInsert(<br><wbr><wbr><wbr> android.provider.ContactsContract.Data.CONTENT_URI)<br><wbr><wbr><wbr> .withValueBackReference(Data.RAW_CONTACT_ID,<br><wbr><wbr><wbr><wbr><wbr> rawContactInsertIndex).withValue(Data.MIMETYPE,<br><wbr><wbr><wbr><wbr><wbr> StructuredName.CONTENT_ITEM_TYPE).withValue(<br><wbr><wbr><wbr><wbr><wbr> StructuredName.GIVEN_NAME, "赵薇").build());<br><wbr> ops.add(ContentProviderOperation<wbr>.newInsert(<br><wbr><wbr><wbr> android.provider.ContactsContract.Data.CONTENT_URI)<br><wbr><wbr><wbr> .withValueBackReference(Data.RAW_CONTACT_ID,<br><wbr><wbr><wbr><wbr><wbr> rawContactInsertIndex).withValue(Data.MIMETYPE,<br><wbr><wbr><wbr><wbr><wbr> Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER,<br><wbr><wbr><wbr><wbr><wbr> "13671323809").withValue(Phone.TYPE, Phone.TYPE_MOBILE)<br><wbr><wbr><wbr> .withValue(Phone.LABEL, "手机号").build());<br><wbr> ops.add(ContentProviderOperation<wbr>.newInsert(<br><wbr><wbr><wbr> android.provider.ContactsContract.Data.CONTENT_URI)<br><wbr><wbr><wbr> .withValueBackReference(Data.RAW_CONTACT_ID,<br><wbr><wbr><wbr><wbr><wbr> rawContactInsertIndex).withValue(Data.MIMETYPE,<br><wbr><wbr><wbr><wbr><wbr> Email.CONTENT_ITEM_TYPE).withValue(Email.DATA,<br><wbr><wbr><wbr><wbr><wbr> "<a href="mailto:liming@itcast.cn').withValue(Email.TYPE">liming@itcast.cn").withValue(Email.TYPE</a>,<br><wbr><wbr><wbr><wbr><wbr> Email.TYPE_WORK).build());<br><wbr> ContentProviderResult[] results = this.getContext()<br><wbr><wbr><wbr> .getContentResolver().applyBatch(ContactsContract.AUTHORITY,<br><wbr><wbr><wbr><wbr><wbr> ops);<br><wbr> for (ContentProviderResult result : results) {<br><wbr><wbr> Log.i(TAG, result.uri.toString());<br><wbr> }<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics