2015-12-21 77 views
0

我試圖用相同的Phone.TYPE以編程方式向現有android聯繫人添加新號碼。但是我的代碼取代了給定Phone.TYPE(如果有的話)中的現有手機號碼。Android:將號碼添加到具有相同號碼類型的現有聯繫人

例如,如果數字12345678存儲在類別Mobile下,我可以在同一類別MobilePeople的應用程序中添加另一個號碼87654321。但是,運行以下代碼後,87654321將替換12345678。什麼是存儲這兩個數字的方式。問題是我不知道哪個Phone.TYPE爲空來存儲新號碼。這就是爲什麼我使用默認類型。以下是我的代碼。

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(); 
} 

回答

0

該數字被替換爲更新而不是新的插入。新數字應該是新的插入操作,因爲您必須在數據表中創建新條目。爲了清楚起見,您可以提示用戶輸入數字的類型或將其插入MOBILE類型,並讓用戶稍後編輯聯繫人。

// 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
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」,空);

Adds +989139277303號碼聯繫

+0

請解釋你的答案。僅由代碼轉儲組成的答案並不是非常有用。 – Resurrection

相關問題