`
king_tt
  • 浏览: 2291662 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【Android 开发教程】ContentProvider的使用范例

 
阅读更多

本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。

原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/


想要理解ContentProvider的最佳方式就是自己动手去尝试一下。下面介绍如何使用一个内置的Contacts ContentProvider。

1. 创建一个工程,Provider。


2. main.xml中的代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:stackFromBottom="false"
        android:transcriptMode="normal" />

    <TextView
        android:id="@+id/contactName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/contactID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

3. ProviderActivity.java中的代码。

public class ProviderActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Uri allContacts = Uri.parse("content://contacts/people");
        Uri allContacts = ContactsContract.Contacts.CONTENT_URI;

        Cursor c;
        if (android.os.Build.VERSION.SDK_INT < 11) {
            // before Honeycomb
            c = managedQuery(allContacts, null, null, null, null);
        } else {
            // Honeycomb and later
            CursorLoader cursorLoader = new CursorLoader(this, allContacts,
                    null, null, null, null);
            c = cursorLoader.loadInBackground();
        }

        String[] columns = new String[] {
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts._ID };

        int[] views = new int[] { R.id.contactName, R.id.contactID };

        SimpleCursorAdapter adapter;

        if (android.os.Build.VERSION.SDK_INT < 11) {
            // before Honeycomb
            adapter = new SimpleCursorAdapter(this, R.layout.main, c, columns,
                    views);
        } else {
            // Honeycomb and later
            adapter = new SimpleCursorAdapter(this, R.layout.main, c, columns,
                    views, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        }
        this.setListAdapter(adapter);

    }

}

4. AndroidManifest.xml文件中的代码,添加权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.manoel.Provider"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".ProviderActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

5. 在模拟器的电脑本里面添加一些联系人。


6. 调试刚刚写好的例子。


在这个例子中,我们获取到所有保存在Contacts(电话本)这个程序里面的联系人信息,并把它们显示在ListView中。

首先,指定Contacts的URI。

        // Uri allContacts = Uri.parse("content://contacts/people");
        Uri allContacts = ContactsContract.Contacts.CONTENT_URI;
然后,检查当前设备的版本。

        Cursor c;
        if (android.os.Build.VERSION.SDK_INT < 11) {
            // before Honeycomb
            c = managedQuery(allContacts, null, null, null, null);
        } else {
            // Honeycomb and later
            CursorLoader cursorLoader = new CursorLoader(this, allContacts,
                    null, null, null, null);
            c = cursorLoader.loadInBackground();
        }
判断版本号,采用不同的方式去获取Cursor。当然了,总是用Activity的managedQuery()方法去获取Cursor也是没问题的。

最后,通过创建SimpleCursorAdapter,用ListView把联系人列表显示出来。

别忘了,还要在配置文件里面添加权限。

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


分享到:
评论

相关推荐

    Android项目开发范例大全

    这个压缩包很可能会包含以上各个方面的实例代码和详细讲解,通过实际操作这些范例,开发者可以深入理解Android开发的各个环节,并提升实战能力。对于初学者,这是一个宝贵的资源库;对于有经验的开发者,也是回顾和...

    Android SDK 开发范例大全2教程源码(3-6章节)

    《Android SDK 开发范例大全2教程源码(3-6章节)》是针对Android开发者的一个宝贵资源,它包含了Android SDK开发过程中多个关键知识点的实例代码。这份源码集覆盖了从第三章到第六章的内容,尽管不完整,但它依然为...

    ANDROID应用开发范例大全-高清版-带详细目录书签-可跳转 PDF

    在Android开发中,开发者首先需要理解的是Android的基础架构。Android系统是基于Linux内核的,它由多个层次组成,包括Linux内核、硬件抽象层(HAL)、库、Android运行时以及应用程序框架。这些组件共同构成了Android...

    Android SDK开发范例大全5

    总之,《Android SDK开发范例大全5》是一本覆盖全面、深入浅出的Android开发教程,无论你是初学者还是有经验的开发者,都能从中受益。通过阅读和实践,你将不仅掌握Android SDK的基本使用,还能提升自己的开发技能,...

    Google Android SDK 开发范例大全 高清PDF版

    《Google Android SDK 开发范例大全》是一本深入浅出的Android开发教程,旨在帮助学习者从基础到高级,全面掌握Android应用开发技术。这本书的高清PDF版包含了丰富的实例和详细讲解,无论你是初学者还是有一定经验的...

    android 开发范例大全

    在Android开发领域,掌握丰富的实例应用是提升技能的关键。"Android 开发范例大全"是一部旨在帮助开发者深入理解和实践Android编程的教程,尤其侧重于第07至10章的内容。这些章节通常涵盖了许多核心概念和技术,对于...

    Google.Android.SDK开发范例大全

    《Google.Android.SDK开发范例大全》是一份详尽的Android应用开发教程,旨在帮助开发者深入理解和实践Android SDK的各项功能。这份资源分为六个部分,全面覆盖了Android开发的基础和高级概念,是初学者和进阶者...

    Google Android SDK开发范例大全pdf完全版

    总的来说,《Google Android SDK开发范例大全》是一本全方位的Android开发教程,无论你是初学者还是有经验的开发者,都能从中获益。通过实践书中的范例,你可以深入理解Android系统的运作机制,提高开发技能,打造出...

    android SDK开发范例

    本资源是Google官方的Android SDK开发范例大全教程的源码,涵盖了从第五章到第八章的内容,对Android初学者和有经验的开发者来说都是宝贵的参考资料。 首先,我们来详细了解一下CH05(第五章)的源码。这一章可能...

    Google Android SDK开发范例大全 - 源码5

    总的来说,《Google Android SDK开发范例大全》提供的源码5包含了一系列实用的代码示例,涵盖了Android开发的关键技术点,是开发者巩固理论知识和提升实战技能的宝贵资料。通过深入研究这些示例,开发者能够更好地...

    Android开发范例大全代码

    "Android开发者资料大全(开发人员必看).xlsx"可能是包含了更详细的教程链接、学习路径或其他重要信息的文档,帮助开发者系统地学习和掌握Android开发。在实践中不断探索和学习这些示例,将极大地促进个人技能的...

    Android 开发范例

    "软件购买注册说明.txt"和"下载说明.txt"可能包含了关于SDK的使用许可和下载安装的详细步骤,这对于初次接触Android开发的用户来说非常重要,能帮助他们避免常见问题。 3. **启动快捷方式**: "软件999.url", ...

    Google Android SDK开发范例大全 - 源码6

    总之,《Google Android SDK开发范例大全》的源码6提供了全面的Android开发实践,涵盖了UI设计、数据管理、多媒体处理和网络通信等核心领域,是深入学习Android开发不可或缺的资源。通过深入研究和实践这些示例,...

    android开发范例大全2光盘源代码(全)

    在Android开发中,理解Activity、Service、BroadcastReceiver和ContentProvider这四大组件至关重要。开发者可能会在这里找到关于如何创建和管理Activity,以及如何在不同组件之间进行通信的示例代码。 2. **CH10**...

    Google Android SDK开发范例大全

    总之,《Google Android SDK开发范例大全》是一本全面覆盖Android开发的实战指南,通过大量的实例和详尽的解析,让读者能够快速掌握Android开发技能,无论是对Android的初学者还是进阶开发者,都能从中获益匪浅。

    Google Android SDK开发范例大全 源码

    《Google Android SDK开发范例大全 源码》是一份非常宝贵...通过这份《Google Android SDK开发范例大全 源码》,开发者可以系统性地学习Android开发,不仅理解基本概念,还能深入到实际操作,从而提升自己的开发技能。

    [Google.Android.SDK开发范例大全].PPT

    【Google.Android.SDK开发范例大全】是一份详细讲解Android应用开发的PPT教程,主要针对使用Google Android SDK进行编程的开发者。这份资料旨在提供全面的示例和实践指导,帮助开发者掌握Android平台上的应用程序...

    Google+Android+SDK开发范例大全(完整版)

    总的来说,《Google+Android+SDK开发范例大全》这本书通过多个章节全面介绍了Android开发的关键技术和最佳实践,对于希望进入Android开发领域的学习者或者寻求提升的开发者来说,无疑是一份宝贵的资源。每个章节的...

    Google+Android+SDK开发范例大全 包含源码.part27-part39

    首先,Google和Android SDK的结合使用是Android开发中的核心部分。Google提供了丰富的服务和API,如Google Maps、Google Play Services、Firebase等,这些都集成在Android SDK中,使得开发者能够构建功能强大的应用...

    android SDK 开发范例大全

    《Android SDK 开发范例大全》是一份针对Android SDK的详细教程,旨在为开发者提供丰富的实践案例,帮助他们深入理解和掌握Android应用开发的各种技术。在这个压缩包中,我们可以找到几个关键文件,包括针对Android ...

Global site tag (gtag.js) - Google Analytics