首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:向相同号码类型的现有联系人添加号码

Android:向相同号码类型的现有联系人添加号码
EN

Stack Overflow用户
提问于 2015-12-22 07:29:17
回答 2查看 1.2K关注 0票数 0

我正在尝试使用相同的Phone.TYPE以编程方式向现有的安卓联系人添加一个新号码。但是我的代码替换了给定Phone.TYPE中的现有手机号码(如果有的话)。

例如:如果一个数字12345678存储在Mobile类别下,我可以通过People的应用程序在同一类别的Mobile中添加另一个数字87654321。但是,在运行下面的代码后,87654321替换了12345678。这两个数字的存储方式是什么。问题是我不知道哪个Phone.TYPE是空的来存储新的数字。这就是为什么我使用默认类型。下面是我的代码。

代码语言:javascript
复制
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

String where1 = ContactsContract.CommonDataKinds.Phone.NUMBER + " = ? ";
String[] params1 = new String[] { oldNumber };
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI).withSelection(where1, params1)
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, newNumber)
       .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).build());

try
{
     cr.applyBatch(ContactsContract.AUTHORITY, ops);
}
catch (RemoteException e)
{
     // TODO Auto-generated catch block
     e.printStackTrace();
}
catch (OperationApplicationException e)
{
     // TODO Auto-generated catch block
     e.printStackTrace();
}
EN

回答 2

Stack Overflow用户

发布于 2015-12-24 14:35:10

当您执行更新而不是新插入时,该编号将被替换。一个新的数字应该是一个新的插入操作,因为您必须在数据表中创建一个新条目。为清楚起见,您可以提示用户输入号码类型,或将其与移动电话类型一起插入,并让用户稍后编辑联系人。

代码语言:javascript
复制
// Inserts the specified phone number and type as a Phone data row
op =
        ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)

        .withValue(ContactsContract.Data.RAW_CONTACT_ID, raw_contact_id)

        // Sets the data row's MIME type to Phone
        .withValue(ContactsContract.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)

        // Sets the phone number and type
        .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
        .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, phoneType);

// Builds the operation and adds it to the array of operations
ops.add(op.build());
票数 0
EN

Stack Overflow用户

发布于 2017-03-12 15:08:48

代码语言:javascript
复制
public static String getRawContactId(String contactId)
{
    String res = "";
    Uri uri = ContactsContract.RawContacts.CONTENT_URI;
    String[] projection = new String[]{ContactsContract.RawContacts._ID};
    String selection = ContactsContract.RawContacts.CONTACT_ID + " = ?";
    String[] selectionArgs = new String[]{ contactId };
    Cursor c = ContentManager.getContentResolver().query(uri, projection, selection, selectionArgs, null);

    if(c != null && c.moveToFirst())
    {
        res = c.getString(c.getColumnIndex(ContactsContract.RawContacts._ID));
        c.close();
    }

    return res;
}
//--------------------------------------------------
public static boolean addContactNumber(String contactId, String newNumber,@Nullable Object type)
{
    try
    {
        if (contactId == null || newNumber == null)
            return false;

        if(type == null)
            type = Phone.TYPE_WORK;

        ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<>();

        android.content.ContentProviderOperation.Builder t ;
        android.content.ContentProviderOperation b ;
        t = android.content.ContentProviderOperation.newInsert(Data.CONTENT_URI);
        t = t.withValue(ContactsContract.Data.RAW_CONTACT_ID, getRawContactId(contactId));
        t = t.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
        t = t.withValue(Phone.NUMBER, newNumber);
        t = t.withValue(Phone.TYPE, type);
        b = t.build();
        ops.add(b);

        ContentManager.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        return true;
    }
    catch (Exception e) {}
    return false;
}
//--------------------------------------------------
public static boolean updateContactNumber(String contactId, String oldNumber, String newNumber,@Nullable Object type)
{
    try
    {
        if (contactId == null || oldNumber == null)
            return false;

        if(type == null)
            type = Phone.TYPE_WORK;

        String where = ContactsContract.Data.CONTACT_ID + " = ? AND "
                + Phone.NUMBER + " = ? AND "
                + ContactsContract.Data.MIMETYPE + " = ?";
        String[] numberParams = new String[]{contactId, oldNumber, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};

        ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<>();

        android.content.ContentProviderOperation.Builder t ;
        android.content.ContentProviderOperation b ;
        t = android.content.ContentProviderOperation.newUpdate(Data.CONTENT_URI);
        t = t.withSelection(where, numberParams);
        t = t.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, newNumber);
        t = t.withValue(Phone.TYPE, type);
        b = t.build();
        ops.add(b);

        ContentManager.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        return true;
    }
    catch (Exception e) {}
    return false;
}
//--------------------------------------------------

示例: addContactNumber("313“,"+989139277303",空);

将+989139277303号码添加到联系人

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34406111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档