Articles of android contacts

在冰淇淋三明治中的ContentResolver中分组

我正在对Android Contacts ContentProvider进行查询。 我需要一个Group By子句。 在Gingerbread和Honeycomb中,我做了类似的事情来同时搜索电话号码和电子邮件: (实际的WHERE子句要复杂得多,因为它包含types检查。这是一种简化,但它会产生相同的结果) String request = Phone.NUMBER + ” LIKE ? OR ” + Email.DATA + ” LIKE ?”; String[] params = new String[“%test%”, “%test%”]; Cursor cursor = getContentResolver().query( Data.CONTENT_URI, new String[] { Data._ID, Data.RAW_CONTACT_ID }, request + “) GROUP BY (” + Data.RAW_CONTACT_ID, params, “lower(” + Data.DISPLAY_NAME + “) ASC”); […]

修改联系信息

我正在尝试插入和更新现有联系人的一条信息,因此我创建了一个示例应用程序以开发function。 我希望我的示例应用程序执行的操作是插入(或者如果存在)更新联系人的电子邮件地址。 我正在通过系统Intent选择一个联系人,如下所示: startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST); 返回的URI是Contact ( RawContact ?)的URI,它被选中并以这种forms出现: content://com.android.contacts/contacts/lookup/0r2-2A90214945/2 。 我可以通过执行以下代码来撤回所有Data ( RawContact ?)项目: Cursor cursor = contentResolver.query(mContactUri, null, null, null, null); try { if (cursor.moveToFirst()) { for(int i=0; i < cursor.getColumnCount(); i++) { String message = cursor.getColumnName(i); Log.v("", message); } } } finally { cursor.close(); } 从这里我应该能够确定联系人是否已经有一个CommonDataTypes.Email Data成员: cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1; […]

在Android应用中从联系人列表中选择一个号码和名称

我想从我的联系人列表中选择一个联系人。 我读了很多解决方案和研究几周,但所有文章都没有正常工作。 一些代码如下: Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT); //并且在activityresult中: if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor c = managedQuery(contactData, null, null, null, null); if (c.moveToFirst()) { String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); tv1.setText(name); } } 或者此代码用于获取所有联系人但我不能拥有联系人数量: String[] contacts = new String[] {People.NAME, People.NUMBER}; Uri contentUri = People.CONTENT_URI; Cursor cursor = managedQuery(contentUri, […]

我可以使用ContentResolver.query()执行此Android查询吗? (LEFT JOIN和CASE)

我想在Android上执行以下查询(在伪代码中): SELECT C.ID, C.NAME, CASE ISNULL(G.GROUPID,0) = 0 THEN 0 ELSE 1 END INGROUP FROM CONTACTS C LEFT JOIN GROUPMEMBERSHIP G ON G.CONTACTID = C.ID AND G.GROUPID = ? 我希望通过默认的Contacts ContentProvider选择系统通讯录中所有联系人的ID和名称,以及指示联系人是否是组成员的0/1字段? 。 我当然可以很容易地获得所有联系人,然后在我的Adapter类中单独循环并查询成员资格,但我想要执行两个查询,因为一个外部联接查询将产生更好的性能。 我可以使用标准的高级字符串投影和ContentResolver.query()方法吗? 或者这种查询是否需要深入研究更直接的SQL执行?

如何在一个SQLite查询中获取联系人ID,电子邮件,电话号码? 联系人Android优化

我希望至少使用一个电话号码获取所有联系人,我也想要每个联系人的所有电话号码和所有电子邮件。 当前代码: // To get All Contacts having atleast one phone number. Uri uri = ContactsContract.Contacts.CONTENT_URI; String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + ” > ?”; String[] selectionArgs = new String[] {“0”}; Cursor cu = applicationContext.getContentResolver().query(uri, null, selection, selectionArgs, null); // For getting All Phone Numbers and Emails further queries : while(cu.moveToNext()){ String id = cu.getString(cu.getColumnIndex(ContactsContract.Contacts._ID)); // […]

隐式连接列如何与Android联系人数据一起使用?

我正在查询ContactsContract.Data表以查找电话记录。 我创建一个新的CursorLoader时出错: java.lang.IllegalArgumentException: Invalid column deleted 我的代码: import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Data; … String[] projection = { Phone.DELETED, Phone.LOOKUP_KEY, Phone.NUMBER, Phone.TYPE, Phone.LABEL, Data.MIMETYPE, Data.DISPLAY_NAME_PRIMARY }; // “mimetype = ? AND deleted = ?” String selection = Data.MIMETYPE + ” = ? AND ” Phone.DELETED + ” = ?”; String[] args = {Phone.CONTENT_ITEM_TYPE, “0”}; return new CursorLoader( […]

如何从Android联系人获取名字和姓氏?

如何从Android联系人中获取以下字段? 我使用的是Android 2.2。 名称前缀 名字 中间名字 姓 名称前缀 语音给出了名字 拼音中间名 语音姓氏

如何检查游标是否为空?

当我试图从手机的联系人列表中获取电话号码时。 问题是,当我在手机中的联系人列表为空时运行应用程序时,应用程序将停止。 我检查了一下,这是因为光标是空的。 如何检查光标是否为空或手机的联系人列表中是否有任何联系人? ArrayList lstPhoneNumber = new ArrayList(); Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); lstPhoneNumber = new ArrayList(); phones.moveToFirst(); // The problematic Line: lstPhoneNumber.add(phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER))); while (phones.moveToNext()) { lstPhoneNumber.add(phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER))); } phones.close();

如何在android中以编程方式删除联系人

我尝试以下代码删除指定号码的联系人: private void removeContact(Context context, String phone) { //context.getContentResolver().delete(Contacts.Phones.CONTENT_URI, phone, null); context.getContentResolver().delete(Contacts.Phones.CONTENT_URI, Contacts.PhonesColumns.NUMBER+”=?”, new String[] {phone}); } 但是我得到了这个例外: java.lang.UnsupportedOperationException: Cannot delete that URL: content://contacts/phones at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:130) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:110) at android.content.ContentProviderProxy.delete(ContentProviderNative.java:362) at android.content.ContentResolver.delete(ContentResolver.java:386) 你能告诉我如何解决我的问题吗? 谢谢。

Android联系人提供商仅获取所有电子邮件的电话联系人

我需要获取所有手机联系人及其电子邮件地址和照片uri: 这就是我在做什么: private void getContacts() { ContentResolver cr = getContentResolver(); Cursor cur = cr.query(Contacts.CONTENT_URI, null, null, null, Contacts.DISPLAY_NAME); if (cur.getCount() > 0) { while (cur.moveToNext()) { // if // (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) // > 0) { Contact contact = new Contact(); String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); Uri uri = getContactPhotoUri(Long.parseLong(id)); // set photoUri contact.setContactPhotoUri(uri); // set name contact.setContactName(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); […]