2012-03-27 1 views
0

私は現在、携帯電話のコンタクトリストにコンタクトを挿入する必要のあるアプリを開発中です。 ContactsContract.RawContacts一括挿入を使用して、連絡先を電話帳に正常に挿入しました。それらを更新しようとしたときがコンタクトインサートに入っていますContact_ID

http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

しかし、彼らはだけではなく、古いものを交換し、より多くのPHONENUMBERを追加します。

私はContacts_IDを介してどこに連絡先が来たのか、明らかに更新時に古い電話番号を置き換えることができます。今

http://developer.android.com/reference/android/provider/ContactsContract.Data.html

私の質問ですが、それは、挿入時にContacts_IDを取得することは可能でしょうか?このコードで連絡先を挿入すると、次のようになります。

ArrayList<ContentProviderOperation> ops = 
      new ArrayList<ContentProviderOperation>(); 
... 
int rawContactInsertIndex = ops.size(); 
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
      .withValue(RawContacts.ACCOUNT_TYPE, accountType) 
      .withValue(RawContacts.ACCOUNT_NAME, accountName) 
      .build()); 

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
      .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
      .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan") 
      .build()); 

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

私はContacts_IDを返信しますか?

ご連絡いただければありがとうございます。

答えて

0

より良い方法で、あなたはRAW_IDではありません!

// Displayed name 
String displayed_name = "Contact's name goes here"; 

// Add the new contact 
try 
{ 
    context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

String select = "(" + ContactsContract.Contacts.DISPLAY_NAME + " == \"" +displayed_name+ "\")"; 
Cursor c = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 
context.startManagingCursor(c); 

if (c.moveToNext()) 
{ 
    int id = new Integer(c.getString(0)).intValue(); 
} 

それは私のために動作します。そして、挿入後にすることを追加し

static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { 
    ContactsContract.Contacts._ID, 
    ContactsContract.Contacts.DISPLAY_NAME, 
    ContactsContract.Contacts.STARRED, 
    ContactsContract.Contacts.TIMES_CONTACTED, 
    ContactsContract.Contacts.CONTACT_PRESENCE, 
    ContactsContract.Contacts.PHOTO_ID, 
    ContactsContract.Contacts.LOOKUP_KEY, 
    ContactsContract.Contacts.HAS_PHONE_NUMBER, 
}; 

はそのように静的変数を追加します。

+0

ありがとう、それも私のために働く。あなたは私のために大きな問題を解決したばかりです – Max

+0

問題ありません。多分あなたは私に手を差し伸べることができます:http://stackoverflow.com/questions/9907751/android-update-a-contact – Manitoba

0

もちろん可能です!ここにあります:

ContentProviderResult[] res; 
try 
{ 
    res = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    if (res != null && res[0] != null) 
    { 
     String uri = res[0].uri.getPath().substring(14); 
     int contact_id = new Integer(uri).intValue()); 
    } 
} 
catch (RemoteException e) 
{ 
    e.printStackTrace(); 
} 
catch (OperationApplicationException e) 
{ 
    e.printStackTrace(); 
} 
+1

ありがとうございました。私はそれがContact_IDではなくRawContact_IDだと思いますが、これは私の問題を解決するはずです。私はあなたの投稿を続けます。再度、感謝します。 – Max

+0

それを試したところ、何らかの理由で文字列uriがcontent://com.android.contacts/raw_contacts/612ではなく/ raw_contacts/612であることがわかりました。つまり、部分文字列は14ではなく、部分文字列(14)でなければなりません。あなたの助けをもう一度ありがとう。 – Max

+0

削除して連絡先を入力すると、「不明」という連絡先が表示されます。私はその連絡先をどのように取り除くことができるか知っていますか? Contact_IDの代わりにRawContact_IDを使用して削除することを何かする必要がありますか?もしそうなら、RawContact_IDの代わりにContact_IDを取得するコードがありますか?新しいString [] {RawContact_ID}).build()); ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI).withSelection(Data.RAW_CONTACT_ID + "=?" getContentResolver()。applyBatch(ContactsContract.AUTHORITY、ops); – Max

関連する問題