4

Droid-phoneの既存の連絡先に電話番号を追加しようとしています。ContentProviderOperationを作成するときに提供する後方参照は単純に0であるため、連絡先の作成と同時にそれを行うのは簡単です。ただし、次のように表示名を照会して後方参照を見つけようとしても機能しません。

Cursor rawContactsReferenceCursor = 
            contentResolver.query(Data.CONTENT_URI, 
                    new String[]{Data.RAW_CONTACT_ID},
                    Data.DISPLAY_NAME+"=\""+displayName+"\"", null, null);

生の連絡先IDを取得しますが、次のコードはIndexOutOfBoundExceptionを生成するだけです(rawConcactReferenceIDは、前のクエリから取得した変数です)。

ArrayList<ContentProviderOperation> op_list = 
    new ArrayList<ContentProviderOperation>();
op_list.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
    .withValueBackReference(Data.RAW_CONTACT_ID, rawConcactReferenceID)
    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
    .withValue(Phone.NUMBER, testNumber)
    .withValue(Phone.TYPE, Phone.TYPE_CUSTOM)
    .withValue(Phone.LABEL, testLabel)
    .build()); 
ContentProviderResult[] result =
    contentResolver.applyBatch(ContactsContract.AUTHORITY, op_list);

大きな課題は、優れたドキュメントが大幅に不足していることです。勉強するためにいくつかの実用的なコピーパスタを手に入れることができれば、私は非常に満足しています。

乾杯、

4

3 に答える 3

4

答えを見つけました。すぐにいくつかのものを追加したい場合はアトミックではありませんが、愚かなアトミック性が必要なのは誰ですか?

ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, new Integer(contactId).intValue());
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, dataValue);
values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
values.put(Phone.LABEL, customLabel);
Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);
于 2010-02-05T10:13:30.027 に答える
2

メールアドレスでも同様の問題が発生しました。これが私が使用した解決策でした:

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
    .withValue(Data.RAW_CONTACT_ID, id)
    .withValue(Email.DATA, value)
    .withValue(Email.MIMETYPE, .Email.CONTENT_ITEM_TYPE)
    .withValue(Email.LABEL, label)
    .withValue(Email.TYPE, Email.TYPE_CUSTOM)
    .build());
ContentProviderResult[] res = cr.applyBatch(ContactsContract.AUTHORITY, ops);

同じ解決策が電話番号でも機能するはずです。

于 2010-02-17T12:30:07.817 に答える
0

これらのリンクはいくつかの助けを提供するかもしれません:

于 2010-08-26T08:52:53.957 に答える