收藏csdn的博客,介绍的比较详细,新手值得一看
1.获取联系人姓名
一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NAME。
- public void fetchAllContacts() {
- ContentResolver contentResolver = this.getContentResolver();
- Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
- null, null, null, null);
- cursor.getCount();
- while(cursor.moveToNext()) {
- System.out.println(cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID)));
- System.out.println(cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME)));
- }
- cursor.close();
- }
执行结果:
- 11-05 14:13:09.987: I/System.out(4692): 13
- 11-05 14:13:09.987: I/System.out(4692): 张三
- 11-05 14:13:09.987: I/System.out(4692): 31
- 11-05 14:13:09.987: I/System.out(4692): 李四
解释:
- ContentResolver contentResolver = this.getContentResolver();
如果实现Fragment中要进行内容提供者的操作:
FragmentActivity fragmentActivity = getActivity();获得当前的Activity
ContentResolver contentResolver = fragmentActivity .getContentResolver()
this在这里指的是MainActivity,ContentResolver直译为内容解析器,什么东东?Android中程序间数据的共享是通过Provider/Resolver进行的。提供数据(内容)的就叫Provider,Resovler提供接口对这个内容进行解读。
在这里,系统提供了联系人的Provider,那么我们就需要构建一个Resolver来读取联系人的内容。
- Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
- null, null, null, null);
根据Android文档,
public final Cursor query (Uri uri, String[] projection,String selection,String[] selectionArgs, StringsortOrder)
第一个参数,uri,rui是什么呢?好吧,上面我们提到了Android提供内容的叫Provider,那么在Android中怎么区分各个Provider?有提供联系人的,有提供图片的等等。所以就需要有一个唯一的标识来标识这个Provider,Uri就是这个标识,android.provider.ContactsContract.Contacts.CONTENT_URI就是提供联系人的内容提供者,可惜这个内容提供者提供的数据很少。
第二个参数,projection,真不知道为什么要用这个单词,这个参数告诉Provider要返回的内容(列Column),比如Contacts Provider提供了联系人的ID和联系人的NAME等内容,如果我们只需要NAME,那么我们就应该使用:
- Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
- new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME}, null, null, null);
当然,下面打印的你就只能显示NAME了,因为你返回的结果不包含ID。用null表示返回Provider的所有内容(列Column)。
第三个参数,selection,设置条件,相当于SQL语句中的where。null表示不进行筛选。如果我们只想返回名称为张三的数据,第三个参数应该设置为:
- Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
- new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME},
- android.provider.ContactsContract.Contacts.DISPLAY_NAME + "='张三'", null, null);
结果:
- 11-05 15:30:32.188: I/System.out(10271): 张三
第四个参数,selectionArgs,这个参数是要配合第三个参数使用的,如果你在第三个参数里面有?,那么你在selectionArgs写的数据就会替换掉?,
- Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
- new String[]{android.provider.ContactsContract.Contacts.DISPLAY_NAME},
- android.provider.ContactsContract.Contacts.DISPLAY_NAME + "=?",
- new String[]{"张三"}, null);
效果和上面一句的效果一样。
第五个参数,sortOrder,按照什么进行排序,相当于SQL语句中的Order by。如果想要结果按照ID的降序排列:
- Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
- null, null,null, android.provider.ContactsContract.Contacts._ID + " DESC");
结果:
- 11-05 16:00:32.808: I/System.out(12523): 31
- 11-05 16:00:32.808: I/System.out(12523): 李四
- 11-05 16:00:32.817: I/System.out(12523): 13
- 11-05 16:00:32.817: I/System.out(12523): 张三
升序,其实默认排序是升序,+" ASC"写不写效果都一样:
- Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
- null, null,null, android.provider.ContactsContract.Contacts._ID + " ASC");
结果:
- 11-05 15:59:10.327: I/System.out(12406): 13
- 11-05 15:59:10.327: I/System.out(12406): 张三
- 11-05 15:59:10.327: I/System.out(12406): 31
- 11-05 15:59:10.327: I/System.out(12406): 李四
相关推荐
ContentResolver数据库操作通常涉及到四种基本操作:增(Insert)、删(Delete)、改(Update)以及查(Query)。下面将详细探讨这些操作。 ##### (一)删除数据 ```java switch (uriMatcher.match(uri)) { case...
【Android 内容提供者详解】 在Android操作系统中,内容提供者(Content Provider)是四大组件之一,它扮演着数据共享的关键角色。内容提供者允许应用程序之间共享和访问数据,即使这些数据存储在私有数据库、文件...
2. **使用**:客户端通过`ContentResolver`与Content Provider交互,使用`ContentResolver.query()`, `ContentResolver.insert()`, `ContentResolver.update()`, 和 `ContentResolver.delete()`方法。 ```java ...
例如,我们可以使用`ContentResolver.query()`、`ContentResolver.insert()`等方法进行数据操作,并使用`UriMatcher`来匹配不同Uri对应的ContentProvider操作。 在实际开发中,ContentProvider常用于实现跨应用的...
Android中ContentProvider和ContentResolver详解 ContentProvider是Android系统中的一种机制,它允许应用程序之间共享数据。它提供了一种标准化的方式来存储和管理数据,使得不同的应用程序可以访问和共享数据。...
2. 请求读取联系人权限后,可以通过ContentResolver.query()方法查询联系人,将结果填充到适配器,展示在ListView或RecyclerView上。 3. 同样,也可以使用ContentResolver.insert(), update()和delete()来添加、修改...
### Android根据URI获取真实路径详解 #### 概述 在Android开发过程中,处理文件路径时经常需要将一个`Uri`转换成真实的文件路径。尤其是在处理用户通过文件选择器选取的图片或文件时,通常会得到一个`Uri`,而这个...
Cursor cursor = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); ``` 这将返回一个Cursor对象,可以遍历查询结果,获取每个联系人的信息。 ...
这个博客《Uri详解之——Uri结构与代码提取》的源码提供了深入理解Uri类的实例和实践,有助于开发者更好地理解和操作Uri。下面将详细探讨Uri的相关知识点。 1. **Uri基本概念**: Uri,全称Uniform Resource ...
使用ContentResolver的query方法,传入Bookmarks_URI、查询列、筛选条件、排序方式等参数: ```java String[] projection = { Browser.BookmarkColumns._ID, Browser.BookmarkColumns.URL, Browser.BookmarkColumns...
在上述代码中,`getContentResolver()`获取当前上下文的ContentResolver实例,`Uri.parse()`解析Uri字符串,`query()`方法则执行查询操作,返回一个Cursor对象,用于遍历查询结果。 TestCP可能是本次讲解的一个实践...
### Android 4.4 获取图库文件路径方法详解 在Android开发中,处理多媒体资源时经常需要访问设备上的图片文件。对于Android 4.4(KitKat)及以上版本,由于安全性和API的变化,获取图库中的图片路径变得更加复杂。...
6. **测试与使用**:创建一个简单的Activity,使用`ContentResolver`和`Uri`来访问ContentProvider提供的数据。例如: ``` Cursor cursor = getContentResolver().query( Uri.parse("content://...
### Android读取电话号码知识点详解 #### 一、概述 在Android开发中,有时候我们需要让应用具有读取用户电话号码的功能,例如为了实现快速拨号、导入联系人等功能。根据提供的代码片段,我们可以看到这是一个简单...
3. 使用ContentResolver的query方法,传入预定义的URI(如ContactsContract.Contacts.CONTENT_URI),以及选择器(null表示获取所有数据)、分组、排序等参数,来获取一个Cursor对象,这个对象包含了查询结果。...
【Android项目通话记录源代码详解】 在Android平台上,通话记录是手机系统中不可或缺的一部分,它允许用户查看、管理他们的通话历史,包括未接电话、已接电话和已拨电话。这个"android项目通话记录源代码"正是针对...
### Android多版本兼容示例详解 #### 一、引言 随着Android系统版本的不断更新迭代,为了确保应用能够在不同的Android版本中正常运行,开发者必须考虑应用的多版本兼容性问题。本文将通过一个示例来详细介绍如何...
### Android获取通话记录知识点详解 #### 一、概述 在Android开发中,有时我们需要访问设备上的通话记录,例如实现拨号记录查询的功能。这通常涉及到对Android系统内部数据的访问和处理。根据提供的代码片段来看,...