我如何在Android 2.1中获得适当的Uri特定联系人

时间:2010-03-18 07:11:11

标签: android android-emulator

我已经编写了一个应用程序并在模拟器上添加了2个联系人,但是我 我无法在Android 2.1上更新他们的名字,代码正在进行中 android 1.6平台,代码如下。

ContentValues contactValues = new ContentValues();
contactValues.put(Contacts.People.NAME, firstName+" "+lastName);
getContentResolver().update(UpdateContactUri, contactValues, null,
null);

在android 1.6中我得到Uri这两个联系人是“content:// 联系人/人/ 1“和”content:// contacts / people / 2“。

但在2.1中我得到的这些值是“content:// contacts / people / 8” 和“content:// contacts / people / 9”并在更新其捐赠时 “java.IllegalArgumentException,Empty values”exception。

当我尝试将静态Uri设为“content:// contacts / people / 1”时, 代码已成功调试,但联系人未更新。

我如何解决它,为什么我不喜欢像1.6平台那样的uri?

提前致谢...

3 个答案:

答案 0 :(得分:4)

在android 2.1中,我使用这个黑客代码来更新联系人姓名:

public static void modifyPeopleName(ContentResolver cr, String id,
        String sName) {
    if (sName == null)
        return;

    ContentValues values = new ContentValues();
    int android_sdk_version = Integer.parseInt(Build.VERSION.SDK);
    if (android_sdk_version < 7) {
        values.put(People.NAME, sName);
        cr.update(People.CONTENT_URI, values, People._ID+"="+id, null);
    } else {
        values.put("data1", sName);
        cr.update(Uri.parse("content://com.android.contacts/data/"),
                values, "raw_contact_id=" + id, null);
    }
    return;
}

答案 1 :(得分:0)

2.1 SDK包含名为ContactsContract的联系人的新contentHandler 查询现在移动到看起来不同,所以我确定URI也是不同的。 我们在2.1中工作只能编辑和获取联系人的字段。 见http://developer.android.com/reference/android/provider/ContactsContract.html

答案 2 :(得分:0)

您可以使用以下代码在模拟器中添加联系人。 import android.provider.Contacts.People;

public void addvaluestocontent()
{
   ContentValues values = new ContentValues();
   values.put(People.NAME, "Abraham Lincoln");
   values.put(People._ID, "1");
   values.put(People.NUMBER, "23333");
   Uri uri = getContentResolver().insert(People.CONTENT_URI, values);
}