【练习】内容提供器一、访问其他程序的数据
简介:
内容提供器主要用于在不同的应用程序之间实现共享数据的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问的数据的安全性,目前,使用内容提供器是Android实现跨程序共享数据的标准方式,不同于文件存储和SharedPreferences存储中的两种全局可读写操作模式,内容提供其可以选择对那一部分数据进行共享,保证我们的隐私数据的安全性,内容提供器用法一般有两种,一种是使用现有的去读取或者操作别的应用程序,第二种的是自己创建以便别的程序能够访问我们的程序;
一、访问其他程序的数据:读取系统联系人信息
- 首先在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>
- 修改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 }
- 最后需要在AndroidManifest.xml中声明权限,以便读取联系人信息 1 <uses-permission android:name="android.permission.READ_CONTACTS"/> ,然后运行程序,便可在你的程序中读取到系统中存在的联系人信息