【问题标题】:Getting favourites contacts in Android在 Android 中获取收藏夹联系人
【发布时间】:2011-06-15 00:09:30
【问题描述】:

我正在尝试获取 Android 联系人收藏夹列表中的所有联系人。目前,我可以获取所有组 ID,包括最喜欢的组 ID。但似乎没有联系人将群组 ID 作为收藏群组 ID。

我正在尝试获取每个组中的所有组 ID 和联系人。打印两个列表后发现收藏夹的group id不在联系人列表中

ArrayList<String> favGroupId=new ArrayList<String>();
        final String[] GROUP_PROJECTION = new String[] {
                ContactsContract.Groups._ID, ContactsContract.Groups.TITLE };
        Cursor  cursor = getContentResolver().query(
        ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null,
                null, ContactsContract.Groups.TITLE);

        while (cursor.moveToNext()) {
            String id = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Groups._ID));
            Log.v("Test",id);

            String gTitle = (cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Groups.TITLE)));

            Log.v("Test",gTitle);
            if (gTitle.contains("Favorite_")) {
                gTitle = "Favorites";
                favGroupId.add(id);
            }
        }
        cursor.close();

【问题讨论】:

    标签: android contacts addressbook favorites


    【解决方案1】:

    您可以在ContactsContract.Contact 类中使用STARRED 字段。如果您将查询更改为:

    Cursor cursor = this.managedQuery(
        ContactsContract.Contacts.CONTENT_URI, projection, "starred=?",
        new String[] {"1"}, null);
    

    这应该返回显示在 Android 上默认联系人应用程序的“收藏夹”选项卡中的所有联系人的列表。

    【讨论】:

      【解决方案2】:

      完整答案,包括使用 Intent 打开联系人的 intentUriString:

      Map getFavoriteContacts(){
      
          Map contactMap = new HashMap();
      
          Uri queryUri = ContactsContract.Contacts.CONTENT_URI;
      
          String[] projection = new String[] {
                  ContactsContract.Contacts._ID,
                  ContactsContract.Contacts.DISPLAY_NAME,
                  ContactsContract.Contacts.STARRED};
      
          String selection =ContactsContract.Contacts.STARRED + "='1'";
      
          Cursor cursor = managedQuery(queryUri, projection, selection, null, null);
      
          while (cursor.moveToNext()) {
              String contactID = cursor.getString(cursor
                      .getColumnIndex(ContactsContract.Contacts._ID));
      
              Intent intent = new Intent(Intent.ACTION_VIEW);
              Uri uri = Uri.withAppendedPath(
                  ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactID));
              intent.setData(uri);
              String intentUriString = intent.toUri(0);
      
              String title = (cursor.getString(
                  cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
      
              contactMap.put(title,intentUriString);
          }
      
          cursor.close();
          return contactMap;
      }
      

      【讨论】:

        【解决方案3】:

        与 Kotlin 绑定:

        import android.content.Context
        import android.provider.ContactsContract
        import android.content.Intent
        import android.net.Uri
        
        
        fun getFavoriteContacts(context: Context): Map<*, *> {
        
            lateinit var contactMap : HashMap<String, String>
        
            val queryUri = ContactsContract.Contacts.CONTENT_URI.buildUpon()
                    .appendQueryParameter(ContactsContract.Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
                    .build()
        
            val projection = arrayOf(
                    ContactsContract.Contacts._ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts.STARRED
            )
        
            val selection = ContactsContract.Contacts.STARRED + "='1'"
        
            val cursor = context.getContentResolver().query(queryUri,
                    projection, selection, null, null)
        
            while (cursor.moveToNext()) {
                val contactID = cursor.getString(cursor
                        .getColumnIndex(ContactsContract.Contacts._ID))
        
                val intent = Intent(Intent.ACTION_VIEW)
                val uri = Uri.withAppendedPath(
                        ContactsContract.Contacts.CONTENT_URI, contactID.toString())
                intent.data = uri
                val intentUriString = intent.toUri(0)
        
                val title = cursor.getString(
                        cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
        
                contactMap[title] = intentUriString
            }
        
            cursor.close()
            return contactMap
        }
        

        【讨论】:

          【解决方案4】:

          这里是用Java获取收藏夹联系方式的完整方法

          ContentResolver contentResolver = context.getContentResolver();
          
              if (contentResolver == null)
                  return;
          
              String[] fieldListProjection = {
                      ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY,
                      ContactsContract.CommonDataKinds.Phone.NUMBER,
                      ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,
                      ContactsContract.Contacts.HAS_PHONE_NUMBER,
                      ContactsContract.Contacts.PHOTO_URI
                      ,ContactsContract.Contacts.STARRED
              };
              String sort = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " ASC";
              Cursor phones = contentResolver
                      .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI
                              , fieldListProjection, null, null, sort);
              HashSet<String> normalizedNumbersAlreadyFound = new HashSet<>();
          
              if (phones != null && phones.getCount() > 0) {
                  while (phones.moveToNext()) {
                      String normalizedNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
          
                      if (Integer.parseInt(phones.getString(phones.getColumnIndex(
                              ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                          if (normalizedNumbersAlreadyFound.add(normalizedNumber)) {
          
                              int id = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                              String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                              String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
          
                              int fav = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.STARRED));
                              boolean isFav;
                              isFav= fav == 1;
          
                              String uri = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
                              if(uri!=null){
                                  contactList.add(new FavContact(id,isFav,name,phoneNumber,uri));
                              }
                              else{
                                  contactList.add(new FavContact(id,isFav,name,phoneNumber));
                              }
          
                          }
                      }
                  }
                  phones.close();
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-08
            • 2013-12-16
            相关资源
            最近更新 更多