标签: contactscontract

在android上使用ContactsContract api从联系人处获取邮政地址

我正在使用ContactsContract api intent来显示活动中的所有联系人.此意图返回联系人的ID.我需要获得此联系人的邮政地址.

这是我用于显示联系人的代码:

Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); startActivityForResult(intent, PICK_CONTACT);

我在onActivityResult函数中得到了结果.

请帮忙,我该怎么做.

sdk android contacts contactscontract

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

如何更新Android联系公司?

我最近为我的应用创建了一个同步适配器,它将通过网络请求与手机中的联系人同步我获得的联系人.添加联系人没有问题,但是当联系信息发生变化时,我无法正确更新联系信息.例如联系人上的公司名称字段.以下是我尝试过的一些示例查询,这些查询无法正常工作或仅部分工作(即 - 某些联系人已更新但未正确):

        ContentValues values = new ContentValues();
    values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, "New Company");
context.getContentResolver().update(Uri.parse("content://com.android.contacts/data/"), values, BaseColumns._ID + "=?", new String[] { String.valueOf(id) } );
Run Code Online (Sandbox Code Playgroud)

我也尝试按照android文档的建议批量执行此操作:

    builder = ContentProviderOperation
            .newUpdate(ContactsContract.Data.CONTENT_URI);
    builder.withSelection(BaseColumns._ID + " =?", new String[]{String.valueOf(id)});

    builder.withValue(
            ContactsContract.CommonDataKinds.Organization.COMPANY,
            "New Company Name!");
    operationList.add(builder.build());
Run Code Online (Sandbox Code Playgroud)

我已阅读ContactContracts文档,最初是在阅读本教程.我也检查AuthenticatorActivity了api中的示例无济于事.任何帮助是极大的赞赏.

android sync contacts contactscontract android-contacts

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

查询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
查看次数

来自ContactsContract.Data的CONTACT_ID不同

我需要对ContactsContract.Data表进行查询,CONTACT_ID列中的值将是不同的(不同的).

码:

final Uri uri = ContactsContract.Data.CONTENT_URI;
final String[] projection = new String[] {//
    ContactsContract.Data.CONTACT_ID, //
    ContactsContract.Data._ID, //
    ContactsContract.Data.DISPLAY_NAME,//
    ContactsContract.Data.LOOKUP_KEY //
};
final StringBuilder selectionBuilder = new StringBuilder();
selectionBuilder.append(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID);
selectionBuilder.append("= ? AND ");
selectionBuilder.append(ContactsContract.Data.MIMETYPE);
selectionBuilder.append("= ? ");
final String selection = selectionBuilder.toString();
final String[] selectionArgs = new String[] {//
    String.valueOf(groupId), //
    ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE //
};
return context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
Run Code Online (Sandbox Code Playgroud)

首先,我试图在投影中添加" DISTINCT" ContactsContract.Data.CONTACT_ID.但有一个例外:java.lang.IllegalArgumentException: Invalid column DISTINCT contact_id

然后,我这样写:

"'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'".
java.lang.IllegalArgumentException: Invalid column …
Run Code Online (Sandbox Code Playgroud)

sql android distinct contactscontract android-contacts

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

Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列

以下查询在我的设备上运行正常(API 15).它在运行API 8或API 10的模拟器中不起作用.

这是查询:

Cursor contactsCur = getContentResolver().query(
  ContactsContract.Data.CONTENT_URI,
  new String[] { ContactsContract.Data._ID,
    ContactsContract.Data.CONTACT_ID,
    ContactsContract.Data.DISPLAY_NAME,
    ContactsContract.CommonDataKinds.Organization.COMPANY,
    ContactsContract.CommonDataKinds.Phone.TYPE,
    ContactsContract.Data.LOOKUP_KEY,
    ContactsContract.CommonDataKinds.Phone.NUMBER,
    Contacts.Data.MIMETYPE,
    ContactsContract.CommonDataKinds.Phone.MIMETYPE,
    ContactsContract.CommonDataKinds.StructuredPostal.CITY,
    ContactsContract.CommonDataKinds.StructuredPostal.STREET,
    ContactsContract.CommonDataKinds.StructuredPostal.REGION,
    ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE},
  ContactsContract.Data.HAS_PHONE_NUMBER + " >? ",
  new String[] { "0" },
  ContactsContract.Data.DISPLAY_NAME + " COLLATE NOCASE ASC");
Run Code Online (Sandbox Code Playgroud)

以下是它抛出的异常: android.database.sqlite.SQLiteException: no such column: has_phone_number: , while compiling: SELECT _id, contact_id, display_name, data1, data2, lookup, data1, mimetype, mimetype, data7, data4, data8, data9 FROM view_data_restricted data WHERE (1) AND (has_phone_number >? ) ORDER BY display_name COLLATE NOCASE ASC …

android android-emulator contactscontract android-contacts android-sqlite

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

未经READ_CONTACTS权限如何获取Android联系人详细信息

根据https://developer.android.com/guide/components/intents-common#Contacts上的官方文档

您可以使用选择意图

public void selectContact() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(intent, REQUEST_SELECT_CONTACT);
}
Run Code Online (Sandbox Code Playgroud)

}

有关在获取联系人URI后如何检索联系人详细信息的信息,请阅读检索联系人的详细信息。记住,当你检索联系人URI与上面的意图,你不会需要READ_CONTACTS权限读取该联系人的详细信息。

它指向https://developer.android.com/training/contacts-provider/retrieve-details以获取联系人的详细信息

当我按照上面链接中的说明进行操作时,我得到

Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data from pid=5313, uid=10087 requires android.permission.READ_CONTACTS, or grantUriPermission()
Run Code Online (Sandbox Code Playgroud)

我试图通过获取联系方式

  • 加载程序(如链接说明中所述)
  • getContentResolver()。query()
  • 尝试使用lookupKey并获取联系人ID

每一种方式都需要require android.permission.READ_CONTACTS异常。是否有一个示例可以按照文档中的说明工作?

最小,完整和可验证的示例,位于

https://github.com/aaronvargas/ContactsSSCCE

要测试是否使用READ_CONTACTS,必须在“系统应用设置”中进行更改

- 编辑

在Android问题跟踪器上通过https://issuetracker.google.com/issues/118400813创建了问题

android android-contentresolver contactscontract android-contacts android-permissions

4
推荐指数
2
解决办法
810
查看次数

通过LOOKUP_KEY和openContactPhotoInputStream方便方法加载联系人图片

我正在修改我的应用程序,以使用LOOKUP_KEY而不是API文档建议的_ID来存储有关联系人的信息.我遇到的唯一问题是我无法再加载联系人的照片.

有问题的代码是这样的:

InputStream s = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), contactUri);
Run Code Online (Sandbox Code Playgroud)

这将返回以下错误: java.lang.IllegalArgumentException: URI: content://com.android.contacts/contacts/lookup/1424i118.2312i1220228108/photo

我用作参数的contactUri通过以下方式获取: Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, contact_key);

在这个例子中,contact_key1424i118.2312i1220228108

基于API文档,这个帮助方法应该适用于我正在使用的两个CONTENT_URI或者CONTENT_LOOKUP_URI.

有任何想法吗?谢谢.

android contactscontract android-contacts

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

如何显示同步失败的消息

我已经构建了一个联系人同步适配器.这一切都很好,但我还需要一件事.如果由于某种原因导致同步无法成功完成,我希望在同步失败时显示Google帐户显示的消息

截图

android sync contactscontract android-syncadapter android-contacts

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

使用API​​ 8以后获取用户/所有者配置文件联系人URI和用户图像

从API 14(Android 4.0以后)开始,我可以使用ContactsContract.Profile.CONTENT_URI获取手机所有者的联系人资料Uri,并通过它获取他们的头像/联系人照片.

我想知道如何从API 8(Android 2.2)到API 13.我只需要照片(所以如果在API 14之前没有用户配置文件联系人的概念就可以了),尽管我是不能确定它实际上是可能的.

android uri contacts contactscontract

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

检测android联系人是否已被删除

我正在尝试维护一个联系人数据库,并在 URI 中的某些内容发生更改时立即获取对添加/更新/删除的回调。

我写了一个 ContentObserver 来观察ContactsContract.Contacts.CONTENT_URI上的联系人。一旦联系人发生变化,我就会收到回调,然后通过检查ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP 来更新我的数据库。虽然这适用于添加/更新,但它不适用于删除联系人

我不想解析内存中的所有联系人并检查 android 数据库。这需要时间和 CPU。

我知道这些类型存在许多问题,但我无法弄清楚删除联系人的具体内容。

是否存在执行此操作的方法?

android contacts contactscontract android-contacts contentobserver

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