2010-07-28 19 views
8

Estoy aprendiendo android. Estoy tratando de convertir el número de contacto programáticamente. ¿Alguien podría ayudarme, por favor, cómo puedo hacer eso?Cómo actualizar el número de contacto usando Android

Mi esfuerzo es:

String lNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

ContentValues values = new ContentValues(); 

Uri lPhoneUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, ContactsContract.CommonDataKinds.Phone.NUMBER);      

values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "45323333")); 
getContentResover().update(lPhoneUri, values, ContactsContract.CommonDataKinds.Phone.NUMBER+"=?", new String[] { lNumber });   

Respuesta

14

creo que son bastante allí. A continuación, se usa la nueva API para actualizar el número de teléfono de WORK de un contacto, suponiendo que ese contacto ya tiene un número de teléfono de trabajo.

public void updateContact (String contactId, String newNumber, Activity act) 
    throws RemoteException, OperationApplicationException{ 

     //ASSERT: @contactId alreay has a work phone number 
     ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
     String selectPhone = Data.CONTACT_ID + "=? AND " + Data.MIMETYPE + "='" + 
         Phone.CONTENT_ITEM_TYPE + "'" + " AND " + Phone.TYPE + "=?"; 
     String[] phoneArgs = new String[]{contactId, String.valueOf(Phone.TYPE_WORK)}; 
     ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
       .withSelection(selectPhone, phoneArgs) 
       .withValue(Phone.NUMBER, newNumber) 
       .build()); 
     act.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } 
+0

Hola, ¿Qué ocurre si el contacto no tiene un teléfono WORK y deseamos actualizar el número de teléfono WORK? – MobiDev

+0

Tengo el problema actualizando el teléfono WORK si está presente, entonces puedo actualizarlo pero hay un problema cuando el teléfono WORK no está allí y tengo que actualizarlo. – MobiDev

+0

¿hay alguna manera de actualizarlo por ID con un URI especial? – Roel

3

Sólo un pequeño cambio, si necesita actualizar cualquier otro teléfono de teléfono del trabajo, que puede tener este método que tiene como parámetro.

public void updateContact (String contactId, String newNumber, String phoneType) 
throws RemoteException, OperationApplicationException{ 

    //ASSERT: @contactId alreay has a work phone number 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    String selectPhone = Data.CONTACT_ID + "=? AND " + Data.MIMETYPE + "='" + 
        Phone.CONTENT_ITEM_TYPE + "'" + " AND " + Phone.TYPE + "=?"; 
    String[] phoneArgs = new String[]{contactId, phoneType}; 
    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
      .withSelection(selectPhone, phoneArgs) 
      .withValue(Phone.NUMBER, newNumber) 
      .build()); 
    this.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
} 
1

Esta clase puede ayudar a actualizar el contacto.

public class UpdateContact extends Activity { 

    private EditText txtName,txtPh; 
    private Button btnUpdate; 
    private TextView txt; 
    private static final String TAG_ID="id"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_PHNO = "phNo"; 
    private static int id; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_update_contact); 
     txtName=(EditText)findViewById(R.id.txtNname); 
     txtPh=(EditText)findViewById(R.id.txtNPhNo); 
     btnUpdate=(Button)findViewById(R.id.btnUpdate); 
     txt=(TextView)findViewById(R.id.txtId); 

     Intent i=getIntent(); 
     id=i.getIntExtra(TAG_ID,0); 
     txtName.setText(i.getStringExtra(TAG_NAME)); 
     txtPh.setText(i.getStringExtra(TAG_PHNO)); 
     //to update contact on button click you can apply this 
     btnUpdate.setOnClickListener(new OnClickListener() { 

      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       DatabaseHandler handler=new DatabaseHandler(UpdateContact.this); 
       Contact contact=new Contact(); 
       contact.setID(id); 
       contact.setName(txtName.getText().toString()); 
       contact.setPhNo(txtPh.getText().toString()); 
       handler.UpdateContact(contact); 
       finish(); 
      } 
     }); 

    } 
} 
7

probar este

    String where = ContactsContract.Data.DISPLAY_NAME + " = ? AND " + 
          ContactsContract.Data.MIMETYPE + " = ? AND " + 
          String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE) + " = ? "; 

        String[] params = new String[] {Cname, 
         ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, 
         String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)}; 

        ArrayList<ContentProviderOperation> ops = 
          new ArrayList<ContentProviderOperation>(); 



        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
          .withSelection(where, params) 
          .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,"9999999999") 
          // .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Sample Name 21") 

          .build()); 

        //email 
        String where3 = ContactsContract.Data.DISPLAY_NAME + " = ? AND " + 
          ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] params3 = new String[] {Cname,"vnd.android.cursor.item/email_v2"}; 
        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
          .withSelection(where3, params3) 
          .withValue(ContactsContract.CommonDataKinds.Email.DATA,"[email protected]") 
          .build()); 

Al utilizar este soy capaz de actualizar los datos de contacto.

+0

¡agradable! funciona para mi – dhpratik

Cuestiones relacionadas