安卓:程序更新的联系人无法与其他应用程序同步

问题描述 投票:0回答:1

当一个联系人被更新为批量操作时 "context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);" 那么其他应用程序,如WhatsApp不会自动更新。

例如,如果手机号码被更新为:-。

String deviceNumber= "+1 (234) 56789";
String oldTrimmed= "+123456789";

  String where = ContactsContract.CommonDataKinds.Phone.NUMBER + " = ? OR " + ContactsContract.CommonDataKinds.Phone.NUMBER + " = ? AND " + ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
        String[] args = {oldTrimmed, deviceNumber, contactId, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};
        ArrayList<ContentProviderOperation> ops = new ArrayList<>();
        ops.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI)
                .withSelection(where, args)
                .build()
        );

那么旧号码在手机上仍然显示为WhatsApp号码。

有没有什么方法可以在更新后触发手机联系人的同步,让其他应用也能自动同步。

android android-contentprovider android-contacts whatsapp
1个回答
0
投票

在以编程方式更新联系人信息的同时,你还应该触发同步,这样所有的适配器就可以同步了。

这可以通过以下方式实现:-

private void requestSync()
    {
        AccountManager am = AccountManager.get(context);
        Account[] accounts = am.getAccounts();
        for (Account account : accounts)
        {
            int isSyncable = ContentResolver.getIsSyncable(account, ContactsContract.AUTHORITY);
            if (isSyncable > 0)
            {
                Bundle extras = new Bundle();
                extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
                ContentResolver.requestSync(accounts[0], ContactsContract.AUTHORITY, extras);
            }
        }
    }

这段代码将获取被添加到设备的联系人应用中的账户,如 "WhatsApp "和 "Google",并请求同步。

权限应该被添加为

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />


0
投票

Whatsapp不是 "基于联系人 "的,而是 "基于电话号码 "的,也就是说,如果您改变了联系人A的电话号码,它不会改变与该联系人的现有对话(因为该对话的 "关键 "是电话号码)。

另外请注意,您可以和那些没有存储在您本地联系人中的电话号码进行对话。

Whatsapp有它的 同步适配器 就像大多数其他对Android通讯录DB进行读写的应用一样,每个应用都可以决定是否要在发生变化时被唤醒并同步.据我所知,Whatsapp不会在每次变化时被唤醒并同步,而是周期性地进行,并且可以由用户手动触发(撰写新消息&gt;菜单&gt;刷新)。

所以总结一下你的最新联系方式 与其他应用程序同步,但在 术语不是你的。

© www.soinside.com 2019 - 2024. All rights reserved.