这个问题应该是我们所有想要在Android中操纵联系人的人的起点。
首先要做的事情
据我所知,自API级别5以来,Contacts API已更改,因此为了使应用程序正常工作,我需要检查手机上的android os是什么,如果之前的5是使用一个内容提供商,或者使用更新的。在这种情况下唯一的烦恼是我得到的弃用警告。该应用程序是针对Android 2.3.3构建的,但需要从1.5 +
开始工作1。查询联系人
这是最容易做的事情。通常查询意味着获取联系人姓名,电话,图片,电子邮件等数据并将其显示在列表视图中。例如,这里是我在API之前的5
中完成的 String[] projectionPeople = new String[] {People._ID, People.NAME,};
String[] projectionPhone = new String[] {Phones.NUMBER};
try {
// Get the base URI for People table in Contacts content provider.
// which is: content://contacts/people/
Uri contactUri = People.CONTENT_URI;
ContentResolver resolver = getContentResolver();
Cursor phonesCursor = null;
Cursor peopleCursor = resolver.query (contactUri,
projectionPeople, //Which columns to return.
"People.NAME is not null", // WHERE clause--we won't specify.
null, // Selection Args??
People.DEFAULT_SORT_ORDER); // Order-by name
if (peopleCursor != null && peopleCursor.getCount() >0)
{
// go to the beginning of the list
peopleCursor.moveToFirst();
do
{
//do something with current contact info
phoneUri= Uri.withAppendedPath(personUri, Contacts.People.Phones.CONTENT_DIRECTORY);
phonesCursor = resolver.query(phoneUri,
projectionPhone,
null,
null,
Phones.DEFAULT_SORT_ORDER);
if (phonesCursor!=null && phonesCursor.getCount()>0)
{
phonesCursor.moveToFirst();
lstPhones = new ArrayList<String>();
do
{
//add phone numbers to a List<String> for instance
} while (phonesCursor.moveToNext());
if (phonesCursor != null && !phonesCursor.isClosed())
phonesCursor.close();
} while (peopleCursor.moveToNext());
if (peopleCursor != null && !peopleCursor.isClosed())
peopleCursor.close();
}
}
catch (Exception ex)
{
}
}
还没有尝试过新的api,但光标应该像
final String[] projection = new String[] {
RawContacts.CONTACT_ID, // the contact id column
RawContacts.DELETED // column if this contact is deleted
};
final Cursor rawContacts = managedQuery(RawContacts.CONTENT_URI, // the URI for raw contact provider
projection
null, // selection = null, retrieve all entries
null, // selection is without parameters
null); // do not order
当然,这需要详细阐述,但它应该提供针对联系人内容提供商的简单查询的基础
2。备份
我对此的第一个想法是:如果我知道联系人的Id,我会在sqlite数据库中创建表格,确切地说是游标列的方式,并将所有数据插入到我的表中。这不是一件容易的事,因为它需要大量的编码,更不用说不同的api具有不同的表结构。备份一个联系人或多个联系人的最佳解决方案是什么?
第3。删除
这应该适用于使用内容提供商的所有api,但是数据会传播到许多软件包和uris上,我不知道从哪里删除
4。插入
备份联系人后,我可能需要重新恢复/插入它。在删除的情况下,我需要插入uris吗?
请让我们试着详细说明这个问题,所以在期货中,需要在Android应用程序中使用联系人的人可以把这个问题作为一个坚实的起点。谢谢stackoverflow社区。 p>
答案 0 :(得分:1)