2015年7月9日星期四

使用容器读取系统联系人

容器,即内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,其提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。

使用内容提供器是Android实现跨程序共享数据的标准方式,不同于文件存储和SharePreferences存储中的两种全局可读写操作模式,内容提供其可以选择只对哪一部分数据进行共享,从而保证了关键,隐私数据的安全。

下面使用现有的内容提供器来读取相应程序中的数据,使用容器来读取系统联系人。

1. 布局文件,使用ListView来显示读取出来的联系人信息

    <ListView 
        android:id="@+id/contacts_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></ListView>

2.MainActivity部分代码

public class MainActivity extends Activity {

ListView contactsView;

ArrayAdapter<String> adapter;

List<String> contactsList = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactsView = (ListView) findViewById(R.id.contacts_view);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, contactsList);
contactsView.setAdapter(adapter);
readContacts();
}

private void readContacts() {
Cursor cursor = null;
try {
// 查询联系人数据
cursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, // 封装好的CONTENET_URI常量
null, null, null);
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.add(displayName + "\n" + number);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close(); // 最后将cursor对象关闭掉
}
}
}

....
}


LOL

没有评论:

发表评论