数据是应用的核心(该话不是我说的,某本书上看到的),在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<ContentProviderOperation<wbr>> ops = new ArrayList<ContentProviderOperation<wbr>>();<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>
}
分享到:
相关推荐
android通信录开发用于毕业设计,希望童鞋们喜欢!多多支持!
手机通信录源码,实现通信录分类,直接拨号等功能
基于Android系统的通信录APP开发.pdf
Android手机通信录
android简单实现通信录功能(主要熟悉intent的用法)
android手机通信录
android手机通讯录备份还原 android手机通讯录备份还原 android手机通讯录备份还原
基于Android平台的手机通讯录管理系统.doc
基于android SQLite的通信录管理系统,可以插入联系人信息,姓名 电话 qq号码等信息,然后以缩进的形式显示,同时支持打电话,发短信
用 android studio 写的首席通信录,适合在 android5.0上运行,支持上传头像
android调用手机通信录并拨打电话.zip
Android之通信录中的联系人操作代码
基于Android的企业通信录APP源码,不耗费任何流量,打开即用,是对本地通信录的补充
简单的Android开发应用,里面有页面跳转,SQLite数据库应用,存储数据语句等
基于android SQLite的通信录管理系统,可以插入联系人信息,姓名 电话 qq号码等信息,然后以缩进的形式显示,同时支持打电话,发短信
实现手机通信录按照字母顺序排序,点击并拨打电话功能
android通讯打电话录,本项目完成保存联系人,页面跳转,呼叫用户等
以用户体验为导向的Android手机通信录的设计.pdf
个人写的android开发,使用九宫格布局模式,数据库有增、删、改、查
基于云计算和Android的班级通信录设计与实现.pdf