java - android 以编程方式编辑联系人

标签 java android android-studio contactscontract

我正在尝试以编程方式编辑联系方式。我想更改电话号码等于 123 的联系人姓名。这是我的非工作代码。

Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode("123"));

        // This query will return NAME and ID of contact, associated with phone //number.

        Cursor mcursor = getContentResolver().query(lookupUri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}, null, null, null);

        //Now retrive _ID from query result
        long idPhone = 0;
        try {
            if (mcursor != null) {
                if (mcursor.moveToFirst()) {
                    idPhone = Long.valueOf(mcursor.getString(mcursor.getColumnIndex(ContactsContract.PhoneLookup._ID)));
                    String getID = String.valueOf(idPhone);
                    Toast.makeText(this.getApplicationContext(), getID, Toast.LENGTH_LONG).show();
                    Uri uri= ContentUris.withAppendedId(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,3625);
                    ContentValues values = new ContentValues();
                    values.put(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,"After Changed name");
                    getContentResolver().update(uri, values, ContactsContract.CommonDataKinds.Phone._ID+"=?", new String[] {String.valueOf(idPhone)});

                }
            }
        } finally {
            mcursor.close();
        }

目前我正在查找电话号码并获取电话号码的 ID。我试图用 ID 更新它,似乎它没有用 ID 更新电话号码。

最佳答案

这是我的工作代码。

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


 //hope this also work for you.

关于java - android 以编程方式编辑联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39031203/

相关文章:

java - JXMultiSplitPane隐藏节点导致绘画问题

android - 为什么要在 Android 中使用 fragment ?

android - 结合排序和过滤的好方法 - Firebase 实时数据库结构

java - JNI 代码中的 LD_PRELOAD 变量

java - 在 if-else 语句中使用标签和中断

android - MapView 控件未在 ViewPager 中加载

android - 如何在跳过循环后调试 for 循环

android-studio - 需要HAXM才能运行此AVD

java - 如何在android studio中停止计时器,然后从停止时重新开始?

java - roughike Bottombar 无法解析方法“attach”