标签: rawcontacts

联系人与原始联系人有什么区别?

我有一个"转储"实用程序,我用它来研究ContactsContract,因为我没有在文档中得到它.当我转储联系人时,它会计算表中的263条记录,但是,我的设备上的联系人应用程序列出了我有244条("显示244个联系人".)

有人可以解释这种差异吗?

我的Sprint LG的联系人应用程序为我同步的每个帐户都有显示选项,我已经进入并检查了所有帐户,因此不应该进行任何过滤.

我在该实用程序中使用的主要URI是:

    Uri uriRawContacts = ContactsContract.RawContacts.CONTENT_URI;
    String[] projection = new String [] {
            ContactsContract.RawContactsEntity._ID,
            ContactsContract.RawContactsEntity.CONTACT_ID,
            ContactsContract.RawContactsEntity.DELETED,
            ContactsContract.RawContactsEntity.AGGREGATION_MODE,
    };
    Cursor cursorRaw = cr.query(uriRawContacts, projection, null, null, null);
    DumpCursor.dumpAnyCursor(getApplicationContext(), "RawContacts", cr, cursorRaw, ",");
Run Code Online (Sandbox Code Playgroud)

接下来是(对于上面的查询中的每个_ID):

                long rawContactId = Long.parseLong(anyCursor.getString(anyCursor.getColumnIndex(RawContacts.CONTACT_ID)));

                Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
                 Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY);

                 Log.d(TAG, "rawContactUri: " + rawContactUri.toString());
                 Log.d(TAG, "entityUri: " + entityUri.toString());

                 Cursor c = cr.query(entityUri, new String[] { RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 }, null, null, null);
Run Code Online (Sandbox Code Playgroud)

然后我遍历第一个查询,显示我的投影中的所有列,然后,使用第一个查询循环中的_ID字段,我发出第二个查询并转储其所有列.

为方便起见,答案中的子弹转换到此处: 有关详细说明,请参阅参考.更具体地说,建议您阅读有关聚合规则的内容. 参考:点击此处查看随后的原始引用文本

  • 联系人数据库分为3个表联系人,原始联系人和数据. …

android contacts contactscontract rawcontacts

21
推荐指数
2
解决办法
1万
查看次数

添加RawContact,使其聚合到现有联系人

我正在尝试向现有联系人添加新的RawContact,以便我的自定义数据字段显示在原始联系人中.我尝试将StructuredName数据行添加到我的新RawContact,其DisplayName与原始RawContact的DisplayName相匹配.我认为匹配的DisplayNames足以聚合两个RawContacts但联系人应用程序似乎将RawContacts显示为不同的联系人.

这是我的代码

  public static void addContact(Context context, Account account, String number, String displayname) {
    Log.e(Global.TAG, "adding contact: " + number + " / " + displayname);

    ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();

    //Create our RawContact
    ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
    builder.withValue(RawContacts.ACCOUNT_NAME, account.name);
    builder.withValue(RawContacts.ACCOUNT_TYPE, account.type);

    operationList.add(builder.build());

    //Create a Data record of common type 'StructuredName' for our RawContact
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayname);
    operationList.add(builder.build());

    //Create a Data record of custom type "vnd.android.cursor.item/vnd.be.ourservice.profile" to display a link to the     profile
    builder …
Run Code Online (Sandbox Code Playgroud)

android contacts aggregation rawcontacts

11
推荐指数
1
解决办法
3887
查看次数

联系人备份和同步应用程序

我正在进行联系人备份和同步.

目标是将所有联系人的所有详细信息发送到服务器(定义的自定义协议)作为备份.

在首次启动应用程序期间,所有联系人都将排队并发送到服务器.之后,后台服务将一直运行,将收听新的联系人添加/联系人更新,这个新的/更新的联系人将由后台服务发送到服务器.

我正在使用RawContactsEntity来获取记录.

我尝试ContentObserver在RawContacts/Data表上使用以获取联系人添加或联系人更改的通知.但是,AFAIK,在整个表格中ContentObserver给出onChange()了已更改数据的通知(),而不是单个记录的ID.

现在我的问题是,如何获得更改/新记录的确切ID?

我想创建一个备份表来与本机联系人表进行比较并获取更改的记录.但随着接触次数的增加,性能会急剧下降,这也会妨碍电池的使用寿命.

你能否建议我,从性能和内存使用的角度来看,实现这种联系备份操作的最佳方法是什么?联系人同步操作还有其他方法吗?

如果有人可以分享可以帮助我的例子,将会非常有帮助.

android contacts rawcontacts android-contacts contentobserver

5
推荐指数
1
解决办法
977
查看次数

查询Android联系人以获取ACCOUNT_TYPE和ACCOUNT_NAME

我能够获得联系人列表及其基本信息,如:姓名.用于备份目的的电话,电子邮件,即时消息,备注,组织,ContactsContract.Contacts.CONTENT_URI用于联系人列表以及针对不同信息类型的其他特定URI.

我需要,为了完全恢复所有信息两个字段:

ContactsContract.RawContacts.ACCOUNT_TYPE

ContactsContract.RawContacts.ACCOUNT_NAME

任何人都可以指导我如何获取此信息,知道来自ContactsContract.Contacts.CONTENT_URI的联系人ID?

谢谢

android contactscontract rawcontacts android-contacts

4
推荐指数
1
解决办法
7500
查看次数

如何在newInsert中将最后插入的RawContacts ID编程到地址簿中?

我成功地将联系人插入到地址簿中,我需要在我的应用程序中保存联系人的参考.我认为保存引用的最佳方法是获取RawContacts ID本身.

有没有办法让我在插入新联系人后立即从地址簿中取回ID?或者我是否必须获取所有记录并将其与我的数据进行比较以获取RawContacts ID?

我使用此代码执行插入操作:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
    .withValue(RawContacts.ACCOUNT_TYPE, null)
    .withValue(RawContacts.ACCOUNT_NAME, null)
    .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
    .build());
Run Code Online (Sandbox Code Playgroud)

我感谢任何输入,无论是变通方法还是API.谢谢!

android contactscontract rawcontacts

1
推荐指数
1
解决办法
1772
查看次数

将通讯录另存为“电话联系人”

有没有办法以编程方式将联系人添加到内部电话通讯录中作为“电话联系人”?

我试过了:

list.add(ContentProviderOperation
                .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build());
Run Code Online (Sandbox Code Playgroud)

使用此参数,联系人成功保存到手机,但如果我将过滤器设置为“仅显示手机联系人” - 不会显示创建的联系人。顺便说一句,我读过nulltype 的联系人可能会丢失干燥帐户同步(不记得完整的案​​例)

然后我尝试从现有的电话联系人中检索ACCOUNT_TYPEACCOUNT_NAME获取PhoneLocal Phone Account字符串,但是当我尝试使用相同的参数保存联系人时:

list.add(ContentProviderOperation
                .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "Phone")
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "Local Phone Account")
                .build());
Run Code Online (Sandbox Code Playgroud)

结果与nulltype的第一种情况相同。

是否有任何常量(或者应该是另一种方式)来保存“电话联系人”等数据?

android contactscontract rawcontacts android-contacts

1
推荐指数
1
解决办法
976
查看次数