2

name="ABC"のようなモバイルの連絡先が1つあります。電話番号="123456789"type = "work" google number = "987654321" type = "work"。この時点で番号"123456789"の連絡先を更新するときは、最初にその連絡先のIDを取得してから、次の連絡先を更新します。 phone.type = "work"。しかし、問題は、連絡先を更新すると、電話番号やgoogle番号などの番号の両方で連絡先が更新されることです。電話の連絡先番号のみを更新し、他のアカウントは更新しないようにするにはどうすればよいですか。このIDで参加しましたか?。私は次のようにコードを書きました:

    public Long getID(String number) {

            Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                    Uri.encode(number));
            Cursor c = getContentResolver().query(uri,
                    new String[] { PhoneLookup._ID}, null, null, null);
            while (c.moveToNext()) {
                return c.getLong(c.getColumnIndex(PhoneLookup._ID));
            }
            return null;
        }  
 public int gettype(String number) {

            Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                    Uri.encode(number));
            Cursor c = getContentResolver().query(uri,
                    new String[] { PhoneLookup.TYPE }, null, null, null);
            while (c.moveToNext()) {
            return c.getInt(c.getColumnIndex(PhoneLookup.TYPE));

            }
            return 0;
        }


Long id = getID(delnumber);
int contact_type= gettype(delnumber);


 String selectPhone = Data.CONTACT_ID+ "=? AND "    + Data.MIMETYPE+ "='"+ Phone.CONTENT_ITEM_TYPE+ "'" + " AND " + Phone.TYPE + "=?";
                                                    Log.i("type",""+contact_type);
                                                    if(contact_type==1)
                                                    {String[] phoneArgs = new String[] {String.valueOf(id), String.valueOf(Phone.TYPE_HOME)};
                                                    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(selectPhone,phoneArgs).withValue(Phone.NUMBER,getnum).build());}
                                                    else if(contact_type==2)
                                                    {String[] phoneArgs = new String[] {String.valueOf(id), String.valueOf(Phone.TYPE_MOBILE)};
                                                    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(selectPhone,phoneArgs).withValue(Phone.NUMBER,getnum).build());}
                                                    else if(contact_type==3)
                                                    {String[] phoneArgs = new String[] {String.valueOf(id), String.valueOf(Phone.TYPE_WORK)};
                                                    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(selectPhone,phoneArgs).withValue(Phone.NUMBER,getnum).build());}
                                                    else
                                                    {String[] phoneArgs = new String[] {String.valueOf(id), String.valueOf(Phone.TYPE_MOBILE)};
                                                    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(selectPhone,phoneArgs).withValue(Phone.NUMBER,getnum).build());} 
4

1 に答える 1

0

まず第一に、上記のフォーマットではコードを読むのが難しいため、これに答えようとしなかったのかもしれませんが、他の電話番号を更新せずに電話番号を更新するために使用するコードを次に示します。

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
            .withSelection(ContactsContract.Data.CONTACT_ID + " = ?", new String[] {userId})
            .withSelection(ContactsContract.Data._ID + " = ?", new String[] {phoneId})
            .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.Data.DATA1, phoneNumber)
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, type)
            .withValue(ContactsContract.CommonDataKinds.Phone.LABEL, label)
            .build());

    try 
    {
        resolver.applyBatch(ContactsContract.AUTHORITY, ops);
    } 

重要なのは、連絡先の連絡先 ID と更新する電話の電話 ID をクエリの選択に含めることです。

于 2013-02-28T20:25:18.073 に答える