• Android学习总结(九)———— 内容提供器(ContentProvider)


    一.内容提供器基本概念

      内容提供器主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。详细资料请看下图:

      

    二.示例代码

    2.1 读取系统联系人

      其实很多时候我们用到ContentProvider并不是自己暴露自己的数据,更多的时候通过ContentResolver来读取其他应用的信息,最常用的莫过于读取系统APP,信息,联系人, 多媒体信息等!如果你想来调用这些ContentProvider就需要自行查阅相关的API资料了! 另外,不同的版本,可能对应着不同的URL!这里给出如何获取URL与对应的数据库表的字段, 这里以最常用的联系人为例。哈哈哈哈~我们还是开始动手吧!

      编写一个布局文件,读取出来的的联系人信息能够在ListView中显示,代码如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <ListView
            android:id="@+id/lvContacts"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    
    </LinearLayout>

      编写一个Activity,用来读取数据,展示数据,代码如下所示:

    package com.nyl.contentprovidercontacts;
    
    import android.app.Activity;
    import android.database.Cursor;
    import android.provider.ContactsContract;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends Activity {
    
        private ListView lvContacts;
    
        private ArrayAdapter<String> arrayAdapter;
    
        private List<String> contactsList = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lvContacts = (ListView) findViewById(R.id.lvContacts);
            arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
            lvContacts.setAdapter(arrayAdapter);
            readContacts();
        }
    
        /**
         * 读取联系人
         */
        private void readContacts() {
            Cursor cursor = null;
            //查询联系人数据
            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null, null,null,null);
            //循环cursor中的数据
            while (cursor.moveToNext()){
                //获取联系人名字
                String displayName = cursor.getString(cursor.getColumnIndex(
                        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                //获取联系人手机号
                String number = cursor.getString(cursor.getColumnIndex(
                        ContactsContract.CommonDataKinds.Phone.NUMBER));
                //将数据添加到contactsList集合
                contactsList.add(displayName+"
    "+number);
            }
        }
    }

      别忘了加读联系人的权限,代码如下:

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

       加入了android.permission.READ_CONTACTS的权限,程序就可以访问到系统的联系人数据,效果如下:

      

      

  • 相关阅读:
    hdu 3074 Multiply game
    uva 10717 Mint
    uva 10128 Queue
    uva 10673 Play with Floor and Ceil
    hdu 1754 I Hate It
    hdu 1166 敌兵布阵
    uva 10079 Pizza Cutting
    费波那列素数
    uva 10236 The Fibonacci Primes
    hdu 1698 Just a Hook
  • 原文地址:https://www.cnblogs.com/nylcy/p/6512654.html
Copyright © 2020-2023  润新知