2013-11-29 22 views
3

我想打開預存了街道地址,電話號碼,電子郵件等的工作表的「保存新聯繫人」對話框,然後用戶可以修改,添加或保存。在Android上,打開使用預填充聯繫表添加新聯繫人的正確方法是什麼?

我見過幾種方法。

1)此方法已被棄用,但大部分工作(無法使用地址等複合類型)。

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
         i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); 
         i.putExtra(Insert.NAME,"Name"); 
         i.putExtra(Insert.PHONE,"Number"); 
         startActivity(i); 

2)這種方法似乎是一個很好的解決方案,但我不能這個數據附加到意圖打開聯繫人應用程序。只有編程式自動插入新聯繫人。

ArrayList<ContentProviderOperation> op=new ArrayList<ContentProviderOperation>(); 
        /* ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType()) 
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName()) 
      .build()); */ 
    op.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name) 
      .build()); 
    op.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,phone).build()); 

      getContentResolver().applyBatch(ContactsContract.AUTHORITY, op); 

解決此問題的最佳做法是什麼?

謝謝。

+0

接觸的一般信息,尋找文件「這種方法已經過時」 - 真的嗎? – CommonsWare

+0

我從IDE此警告在該行 \t 多個標記 - 現場Contacts.Intents.Insert.NAME是 \t過時 \t - 類型Contacts.Intents.Insert已過時 – Joel

回答

3

問題是你使用的是錯誤的常量。您正在使用的Insert.NAME是從類

Contacts.Intents.Insert 

這是在API級別5棄用它與類

ContactsContract.Intents.Insert 

替換如果從這個類,你應該使用常量沒事的!我已經相應地更新你的代碼:

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
         i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); 
         i.putExtra(ContactsContract.Intents.Insert.NAME,"Name"); 
         i.putExtra(ContactsContract.Intents.Insert.PHONE,"Number"); 
         startActivity(i); 

可以爲ContactsContract.Intents.Insert類here和有關修改使用意圖here

+0

的Eclipse拋出的警告,告訴我插入現場Contacts.Intents.Insert.NAME是 \t過時 \t - - .NAME在這條線 \t depricated 多個標記類型Contacts.Intents.Insert已過時 – Joel

+0

是啊,我的錯誤,這個類被替換與ContactsContrac噸。我會編輯我的答案。這裏是ContactsContract的文檔:http://developer.android.com/reference/android/provider/ContactsContract.html –

+0

@Joel:你正在混合和匹配'ContactsContract'和'Contacts'。刪除所有對「聯繫人」的引用,並根據情況將其更改爲「ContactsContract」。 – CommonsWare

相關問題