我正在尝试使用RawContacts.entityIterator读取所有联系人,但我看到了这个错误:
android.database.CursorIndexOutOfBoundsException:索引-1请求
以下是我的代码:
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(Contacts.CONTENT_URI,
null, null, null, null);
String id = cur.getString(cur.getColumnIndex(Contacts._ID));
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
final Uri uri = RawContactsEntity.CONTENT_URI;
final String selection = Data.CONTACT_ID + "=?";
final String[] selectionArgs = new String[] {id};
final Map<String, List<ContentValues>> contentValuesListMap =
new HashMap<String, List<ContentValues>>();
EntityIterator entityIterator = null;
entityIterator = RawContacts.newEntityIterator(cr.query(
uri, null, selection, selectionArgs, null));
while (entityIterator.hasNext()) {
Entity entity = entityIterator.next();
for (NamedContentValues namedContentValues : entity.getSubValues()) {
ContentValues …Run Code Online (Sandbox Code Playgroud) 如何使用您自己的应用程序(并使用Android Beam)将联系人发送到另一台设备并将其保存在其联系人列表中(即默认联系人应用程序).发送设备上的联系人将由ContactsContract提供商提供.
我最好不要让其他设备运行我的应用程序.内置联系人应用程序(Android的默认应用程序)可以发送和接收联系人.因此,应该可以使用自定义应用程序将联系人发送到内置联系人应用程序.
目前,我的应用程序将通过电话号码搜索联系人,然后将其显示在新活动(即内置联系人应用程序)中.见下文.
Uri uri = Uri.fromParts("tel", number.getText().toString(), "");
Log.d("ContactPicker", uri.toString());
startActivity(new Intent(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT, uri));
// Example log message for the number (123)-123-1234 is "tel:(123)%20123-1234"
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样做,但不要认为这是可能的,因为我无法返回找到的联系人(或者如果找不到现有的联系人,则返回创建的联系人).如果我想要发送特定联系人,我需要这些信息.
我可能需要查询所有联系人,找到我正在寻找的联系人并保存其ID.
注意:我正在使用API 14
我做了一个概念证明应用程序,它执行此操作:https://github.com/dideler/HiFive
该应用程序可能是错误的.它没有维护,但欢迎拉取请求.
是否有任何android API来提取vcard 3.0格式的联系人?我遇到了一个开源vcard项目android-vcard
但在使用示例中,提到了以下注释.
重要提示:如果您正在为Android设备开发应用程序,则不必使用此库,因为它已包含在基础Android框架中.只有在开发要在Android环境之外运行的应用程序时,此库才有用.Android开发人员:两次阅读此文本.
您能告诉我上面描述中提到哪个库吗?它是否可供应用程序开发人员使用?