1

使用 API 我试图创建一个联系人,使用 API 2.x 而不是旧的。这里http://developer.android.com/guide/topics/providers/content-providers.html它只解释了旧的 API。我还没有找到任何合适的教程、示例等来展示如何创建联系人。据我所知,我必须创建一个原始联系人,在原始联系人下,我从那里找到了http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html我试过了

ContentValues values = new ContentValues(); 
values.put(RawContacts.ACCOUNT_TYPE, accountType); //accountType = "xxxx"
values.put(RawContacts.ACCOUNT_NAME, accountName); //accountName = "aaaa"
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); 
long rawContactId = ContentUris.parseId(rawContactUri); 
values.clear(); 
values.put(Data.RAW_CONTACT_ID, rawContactId); 
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
values.put(StructuredName.DISPLAY_NAME, "Mike Sullivan"); 
getContentResolver().insert(Data.CONTENT_URI, values);

最后一行代码显示“Data.CONTENT_URI”无法解析。看起来这行代码是针对 1.6 API 的,我把 Data.CONTENT_URI 改成了 ContactsContract.Data.CONTENT_URI。至少代码可以编译并执行,但之后我的地址簿中仍然没有联系人 Mike Sullivan。我现在也用“ContactsContract.Data”交换了其他“数据”,但仍然没有变化。

有没有人简单的例子如何在 2.x 的地址簿中创建一个人?

编辑:我取得了一些进展,看起来我总是需要手机上的帐户来添加联系人。我的手机有帐户类型 com.google 和帐户名称 xxxxx@gmail.com。模拟器什么都没有。我想知道我必须将我的联系人添加到哪个帐户?我可以假设我总是只有一个 gmail 帐户并使用这个帐户吗?

4

1 回答 1

0

你在寻找这样的东西吗?

{ // insert a new data item
    // first we need to get a raw contact corresponding to the contact.
    Cursor rawCur = getContentResolver().query(RawContacts.CONTENT_URI,
         new String[]{RawContacts._ID},
         RawContacts.CONTACT_ID + "=?",
         new String[]{String.valueOf(contactId)}, null);

    long rawContactId = -1;
    for (boolean moreRaws = rawCur.moveToFirst(); moreRaws;
        moreRaws = rawCur.moveToNext()) 
    {
        rawContactId = rawCur.getLong(rawCur.getColumnIndex(RawContacts._ID));
    }

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();    

    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
       .withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
       .withValue(ContactsContract.Data.MIMETYPE,
                     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,"y123-456-7890")
          .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                     ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME)
       .build());

    try {
       ContentProviderResult[] results = 
                   getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
       logger.info("result: "+results[0]);
    } catch (UnsupportedOperationException ex) {
       ex.printStackTrace();
    } catch (RemoteException ex) {
       ex.printStackTrace();
    } catch (OperationApplicationException ex) {
       ex.printStackTrace();
    } 
    }
于 2010-11-24T00:08:38.480 回答