如何使用安卓更新联系人电话号码

9

我正在学习安卓开发。我想通过编程来更新联系人号码。请问有谁能帮我吗?

我的尝试是:

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 });        
5个回答

15

我认为你已经接近成功了。以下代码使用新的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);
    }

你好,如果联系人没有工作电话,我们想要更新工作电话号码怎么办? - AndroidDev
我有一个问题,如果工作电话存在,我可以更新它,但是当工作电话不存在时,我必须更新它,这就出现了问题。 - AndroidDev
有没有一种通过特殊URI按ID更新它的方法? - Roel

8

试试这个

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

通过使用此功能,我可以更新联系人的详细信息。

在某些手机上,例如三星Edge系列,此代码将无法正常工作,数字之间会出现空白。 - user8462556

3

只需做出小改变,如果您需要更新的不是工作电话而是其他电话,您可以将其作为参数进行方法。

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

这个类可能有助于更新联系人信息。

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

    }  
}

0

以下是如何更新您的Phone.Home。

val rawContactId = "101"

val contentProviderOperation = ArrayList<ContentProviderOperation>()
val where = ContactsContract.Data.RAW_CONTACT_ID + "=? AND " +
        ContactsContract.Contacts.Data.MIMETYPE + "=" +
        "'${ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE}'" + " AND " +
        ContactsContract.CommonDataKinds.Phone.TYPE + "=?"

val params = arrayOf(rawContactId, "${ContactsContract.CommonDataKinds.Phone.TYPE_HOME}")
contentProviderOperation.add(
    ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
        .withSelection(where, params)
        .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "+60123456789")
        .build()
)

try {
    contentResolver.applyBatch(ContactsContract.AUTHORITY, contentProviderOperation)
    showToastyMessage("Contact Update Successfully")
} catch (exception: Exception) {
    showToastyMessage(exception.message.toString())
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接