Как обновить контактный номер с помощью Android - PullRequest
8 голосов
/ 28 июля 2010

учу андроид.Я пытаюсь обновить контактный номер программно.Может ли кто-нибудь помочь мне, пожалуйста, как я могу это сделать.

Мои усилия:

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

Ответы [ 4 ]

14 голосов
/ 28 июля 2010

Я думаю, что вы в значительной степени там.Далее используется новый API для обновления рабочего номера контакта, предположим, что у этого контакта уже есть рабочий номер телефона.

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);
    }
7 голосов
/ 13 января 2015

Попробуйте это

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,"a@b.com")
    .build()
);

С помощью этого я могу обновить контактную информацию.

3 голосов
/ 03 августа 2013

Просто небольшое изменение, если вам нужно обновить какой-либо другой телефон, кроме рабочего телефона, вы можете использовать метод, который имеет это в качестве параметра.

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 голос
/ 21 августа 2014

Этот класс может помочь обновить контакт.

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

    }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...