Android ApiDemos示例解析(10) App->Activity->QuickContactsDemo

QuickContactsDemo示例介绍了如果使用Content Provider来访问Android系统的Contacts 数据库。

Content  Provider为不同应用之间共享数据提供了统一的接口,通过对底层数据源的抽象,Content Provider实现了应用程序代码和数 据层分离。Android平台对大部分的系统数据库都提供了对应的Content Provider接口:

Browser: 读取和修改Bookmark,Browser history或Web Searches。

CallLog: 查看或是更新Call History(打入电话或是打出电话,未接电话等)

Contacts: 检索,修改或存储通讯录。

MediaStore: 访问媒体库(包括声音,视频,图像等)。

Settings: 访问系统设置,查看或是修改蓝牙设置,铃声设置等。

Android系统的每个Content Provider都定义了一个CONTENT_URI,功能类似于数据库的名称。Android中每个Context对象( 如Activity)对含有一个ContentResolver,ContentResolver可以根据CONTENT_URI获取对应的Content Provider:

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.quick_contacts, c);
 setListAdapter(adapter);     

}

getContentResolver() 取的ContentResolver对象,它的Query方法定义如下:

public final Cursorquery (Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder)

Uri: 需要访问的Content Provider对应的URI,如通讯录的URI为Contacts.CONTENT_URI。

Projection: 需要返回的表的列名,如为NULL,则返回表的全部列。

Selection: 查询数据表的条件,相当于SQL 的Where语句。

selectionArgs: 相当于SQL查询条件的查询参数?

sortOrder:  相当于SQL查询的Order语句,查询排序,为空时,返回记录的缺省顺序。

可以看得出,Content Provider和 数据库的用法非常类似。query返回的对象为Cusor ,有Cursor对象后就可以和访问数据 库表一样来insert ,delete ,update 数据库。

startManagingCursor(c); 让Activity来管理cursor 的生命周期。

此外访问Content Provider还需要合适的权限才能正确访问,比如读写通讯录,需要在AndroidManifest.xml设置:

<uses-permission android:name=”android.permission.READ_CONTACTS” />
<uses-permission android:name=”android.permission.WRITE_CONTACTS” />

才能有权限访问通信录。

注:如果在模拟器上 运行这个示例,需要在Contacts添加几个Contacts,否则这个例子没有显示。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, string
, 查询
, contentresolver
, content
, contacts
, app通讯
, 未接电话个数
, 通讯录android
, provider
, adapter用法
, CallLog
android实现通讯录
android apidemos、android api demos、android apidemos在哪、android6.0 apidemos、android apidemos下载,以便于您获取更多的相关知识。

时间: 2024-11-03 12:27:41

Android ApiDemos示例解析(10) App-&gt;Activity-&gt;QuickContactsDemo的相关文章

Android ApiDemos示例解析(37):App-&amp;gt;Search-&amp;gt;Query Search Results

这个例子单独运行时(从Launcher启动),这时接受到的Intent不含ACTION_SEARCH,和一个普通的Activity没有什么两样. 在例(36)时,它是作为查询处理Activity用于显示用户查询内容. SearchQueryResults 在AndroidManifest.xml定义为 Searchable Activity: <intent-filter> <action android:name="android.intent.action.SEARCH&q

Android ApiDemos示例解析(35):App-&amp;gt;Preferences-&amp;gt;Advanced preferences

前篇文章Android ApiDemo示例解析(31):App->Preferences->Launching preferences 中用到了Advanced preferences 中定义的AdvancedPreferences. 本篇具体介绍AdvancedPreferences, 这个例子称为Advanced ,是因为 它涉及到了自定义Preference, 并在一个工作线程中刷新某个Preference的值. Preference 为显示在 PreferenceActivity (一

Android ApiDemos示例解析(43):App-&amp;gt;Service-&amp;gt;Remote Service Controller

Remote Service Controller 和使用Local Service的Android ApiDemo示例解析(40):App->Service->Local Service Controller 都是使用Service的"Started" 模式,RemoteService在 AndroidManifest.xml中的定义如下: <service android:name=".app.RemoteService" android:pr

Android ApiDemos示例解析(30) App-&amp;gt;Preferences-&amp;gt;Preferences from XML

我们在前面的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 介绍了可以使用Shared Preferences来存储一些状态,Shared Preferences更一般的用法是用来存储一些应用程序偏好(设置). 包 android.preference 提供了很多类可以方便应用程序来显示和设置应用相关的偏好.当然你可以使用自定义的UI来配置这些程 序偏好.但使用android.preference中定义的类可以给用户一个统一的U

Android ApiDemos示例解析(14) App-&amp;gt;Activity-&amp;gt;Save &amp;amp; Restore State

Save & Restore State与之前的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 实现的 UI类似,但功能和实现方法稍有不同.(9)是通过Shared Preferences 和 Activity 的onPause() ,和onResume()来保持UI中 EditText 的值.本例是通过onSaveInstanceState(Bundle savedBundle) 来实现保持UI状态. 和onPause

Android ApiDemos示例解析(25) App-&amp;gt;Menu-&amp;gt;Inflate from XML

本例演示了如何从Menu 资源(XML 定义)展开菜单项.这个例子的onCreate 采用了使用代码来创建Activity 界面的方法 而通常的方法是采用Layout资源的方法.如果你有兴趣了解一下如何使用代码创建UI,可以参考本例的onCreate方法,但这不是 本例的演示目的. 使用XML 菜单资源来展开菜单的一般步骤是 1. 在/res/menu目录下定义菜单资源,本例中定义 了10种不同风格的菜单项:"Title only", "Title and Icon"

Android ApiDemos示例解析(21) App-&amp;gt;Device Admin

Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager. 类 DevicePolicyManager 用于管理Android设备定义的一些策略,主要指密码定义的长度,密码是否要含大写字母,小写字母等设 置密码需要满足的规范,锁定设备或是清除所有用户数据,这个类一般需要配合DeviceAdminReceiver来使用. DeviceAdminReceiver派生于BroadcastReceiver,可以接受

Android ApiDemos示例解析(13) App-&amp;gt;Activity-&amp;gt;Reorder Activities

Reorder Activities 示例有四个相关的Activitives: ReorderOnLaunch, ReorderTwo,ReorderThree, ReorderFour.其中ReorderOnLaunch为主Activity,ReorderOnLaunch启动ReorderTwo ,ReorderTwo启动 ReorderThree,ReorderThree启动 ReorderFour. 这时在Activity的"back stack"有如下状态: ReorderFo

Android ApiDemos示例解析(6) App-&amp;gt;Activity-&amp;gt;Dialog

在Custom Dialog中说过可以将Activity的Theme定义为Dialog风格,使得Activity看起来像是个对话框(Dialog),而 Custome Title 说明如果自定义标题栏. Dialog示例同样使用Dialog风格来显示Activity,同时为Titlebar 设置坐标的图标. DialogActivity使用Android系统定义的Dialog Theme: <activity android:name=".app.DialogActivity"