csschn

Android,你等等我。。。

导航

【练习】内容提供器一、访问其他程序的数据

简介:

  内容提供器主要用于在不同的应用程序之间实现共享数据的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问的数据的安全性,目前,使用内容提供器是Android实现跨程序共享数据的标准方式,不同于文件存储和SharedPreferences存储中的两种全局可读写操作模式,内容提供其可以选择对那一部分数据进行共享,保证我们的隐私数据的安全性,内容提供器用法一般有两种,一种是使用现有的去读取或者操作别的应用程序,第二种的是自己创建以便别的程序能够访问我们的程序;

一、访问其他程序的数据:读取系统联系人信息

  1. 首先在activity_main.xml中放一个ListView用于显示读取到的练习人信息。
     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context="com.example.contactstest.MainActivity" 
    10     android:background="#FFFFCC">
    11 
    12     <ListView
    13         android:id="@+id/contacts_view"
    14         android:layout_width="match_parent"
    15         android:layout_height="match_parent"/>
    16 </RelativeLayout>
  2. 修改MainActivity.java中的代码,实现读取系统联系人
     1 package com.example.contactstest;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import android.app.Activity;
     7 import android.database.Cursor;
     8 import android.os.Bundle;
     9 import android.provider.ContactsContract;
    10 import android.view.Menu;
    11 import android.view.MenuItem;
    12 import android.widget.ArrayAdapter;
    13 import android.widget.ListView;
    14 
    15 public class MainActivity extends Activity {
    16 
    17     ListView contactsView ;//定义ListView
    18     
    19     ArrayAdapter<String> adapter;//定义适配器
    20     
    21     List<String> contactsList = new ArrayList<String>();//定义一个List数组
    22     
    23     @Override
    24     protected void onCreate(Bundle savedInstanceState) {
    25         super.onCreate(savedInstanceState);
    26         setContentView(R.layout.activity_main);
    27         contactsView = (ListView) findViewById(R.id.contacts_view);
    28         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,contactsList);//实例化适配器
    29         contactsView.setAdapter(adapter);//给ListView设置适配器
    30         readContacts();//调用方法实现读取系统联系人功能 
    31     }
    32 
    33     private void readContacts() {
    34         // TODO Auto-generated method stub
    35         Cursor cursor = null;//定义光标Cursor
    36         try {
    37             //查询联系人数据
    38             
    39             //调用当前的getContentResolver获取Cursor光标对象
    40             cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    41             while (cursor.moveToNext()) {
    42                 //获取联系人名称
    43                 String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    44                 //获取联系人手机号
    45                 String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    46                 
    47                 //往列表中加入读取到的联系人姓名和电话号码
    48                 contactsList.add(displayName+"\n"+number);
    49                 
    50             }
    51         } catch (Exception e) {
    52             e.printStackTrace();
    53         }finally
    54         {
    55             if (cursor != null) {
    56                 cursor.close();//关闭游标
    57             }
    58         }
    59     }
    60 
    61     
    62 }

     

  3. 最后需要在AndroidManifest.xml中声明权限,以便读取联系人信息 1 <uses-permission android:name="android.permission.READ_CONTACTS"/> ,然后运行程序,便可在你的程序中读取到系统中存在的联系人信息

posted on 2016-03-10 16:04  csschn  阅读(243)  评论(0编辑  收藏  举报