如何将新联系人从应用程序导出到电话簿作为可编辑

Posted

技术标签:

【中文标题】如何将新联系人从应用程序导出到电话簿作为可编辑【英文标题】:How to make new contacts exported from an app to Phonebook as EDITABLE 【发布时间】:2019-10-24 15:59:03 【问题描述】:

我有一个应用程序,它有自己的一组联系人,这些联系人来自服务器。我正在将此联系人导出到本机联系人数据库。这样我就可以从电话簿中访问它。但是,我想让这些联系人在本机应用程序中可编辑。

我为此使用帐户验证器和同步适配器方法。

下面是我的sync-adapterxml

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.android.contacts"
    android:supportsUploading="true"
    android:userVisible="true"
    android:accountType="com.example.myapp"
/>

设置android:supportsUploading="true"

此外,通过将以下标志设置为 0,将原始联系人和数据字段导出为非只读 android.provider.ContactsContract.RawContacts.RAW_CONTACT_IS_READ_ONLY android.provider.ContactsContract.RawContacts.DATA_IS_READ_ONLY

我仍然没有看到在本机应用程序中编辑我的联系人的选项。 这里缺少什么?

提前致谢

[更新] 我正在使用下面的代码来检查联系人支持的帐户类型并且是可编辑的。

final SyncAdapterType[] syncs = ContentResolver.getSyncAdapterTypes();
for (SyncAdapterType sync : syncs) 
    Log.d(TAG, "found SyncAdapter: " + sync.accountType);
    if (ContactsContract.AUTHORITY.equals(sync.authority)) 
        Log.d(TAG, "found SyncAdapter that supports contacts: " + sync.accountType);
        if (sync.supportsUploading()) 
            Log.d(TAG, "found SyncAdapter that supports contacts and is not read-only: " + sync.accountType);
            // we'll now get a list of all accounts under that accountType:
            Account[] accounts = AccountManager.get(this).getAccountsByType(sync.accountType);
            for (Account account : accounts) 
               Log.d(TAG, account.type + " / " + account.name);
            
        
    

我的应用帐户类型是非只读的,但仍然看不到编辑选项。请帮忙

【问题讨论】:

【参考方案1】:

你需要做的几件事:

    实现SyncService 并在AndroidManifest 上声明它 创建一个contacts.xml 文件,告知联系人编辑器如何解析和编辑与您的帐户相关的联系人

见: https://github.com/xwiki-contrib/android-authenticator/blob/master/app/src/main/AndroidManifest.xml#L81-L94 https://github.com/xwiki-contrib/android-authenticator/blob/master/app/src/main/res/xml/syncadapter.xml https://github.com/xwiki-contrib/android-authenticator/blob/master/app/src/main/res/xml/contacts.xml

作为例子。

【讨论】:

谢谢@marmor。我正在同步的服务器不支持每个联系人超过 3 封电子邮件。此外,它有一定的限制,比如允许的电话类型为 WORK max 是 2。我们可以在 contacts.xml 中设置这些规则吗?另外,我需要使用哪些关键字?任何链接/教程将不胜感激。 我在github.com/arekolek/knurek/blob/master/client/knurek/res/xml/… 下方尝试了类似的操作,但联系人编辑器不遵守限制。 下载“google 通讯录”并检查他们的编辑器是否正常工作,如果可以,这是您的股票联系人应用程序中的一个错误,如果不是,可能是您没有正确声明某些内容,尝试安装并安装使用以下代码:android.googlesource.com/platform/development/+/master/samples/…,看看是否适合您 我认为您是对的,它在 Google 联系人中运行良好。但是在我的三星本机应用程序中。效果不好。 谢谢你!我感谢您的帮助!不过还有一个问题。我找不到 EditSchema 的任何相关文档。我们如何才能限制特定类型的出现。例如,手机类型应该允许最多 2 个。我可以做类似 的事情吗?

以上是关于如何将新联系人从应用程序导出到电话簿作为可编辑的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助从 delphi 将新联系人插入访问 mdb

如何从 android 的电话簿中选择联系人号码到我的应用程序中?

如何在 Android Studios 中更新联系人的电话号码

如何使用 xmpp 框架和 openfire 服务器将电话簿联系人添加到 ios 中的聊天应用程序?

从链接到我的应用程序的电话簿中删除联系人

每当将新联系人添加到联系人时,如何添加类似whatsapp的选项以进行联系