在Android中获取最受欢迎的联系人

在Android中获取最受欢迎的联系人,android,contacts,addressbook,favorites,Android,Contacts,Addressbook,Favorites,我正在尝试获取Android联系人收藏夹列表中的所有联系人。目前,我可以获得所有的组ID,包括最喜爱的组ID。但似乎没有联系人将组ID作为最喜爱的组ID 我正在尝试获取每个组中的所有组id和联系人。在打印了两个列表后,我发现favorite的组id不在联系人列表中 ArrayList<String> favGroupId=new ArrayList<String>(); final String[] GROUP_PROJECTION = new Strin

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

我正在尝试获取每个组中的所有组id和联系人。在打印了两个列表后,我发现favorite的组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();
ArrayList favGroupId=new ArrayList();
最终字符串[]组投影=新字符串[]{
contacts contract.Groups.\u ID,contacts contract.Groups.TITLE};
Cursor Cursor=getContentResolver().query(
contacts contract.Groups.CONTENT\u URI,组投影,null,
空,ContactsContract.Groups.TITLE);
while(cursor.moveToNext()){
String id=cursor.getString(cursor
.getColumnIndex(ContactsContract.Groups._ID));
Log.v(“测试”,id);
字符串gTitle=(cursor.getString(cursor
.getColumnIndex(ContactsContract.Groups.TITLE));
Log.v(“测试”,gTitle);
if(gTitle.contains(“收藏夹”)){
gTitle=“收藏夹”;
favGroupId.add(id);
}
}
cursor.close();
您可以使用类中的字段。如果将查询更改为:

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

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

完成回答,包括打开联系人的意向:

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;
}
请与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
}
导入android.content.Context
导入android.provider.contacts合同
导入android.content.Intent
导入android.net.Uri
趣味getFavoriteContacts(上下文:上下文):映射{
lateinit var contactMap:HashMap
val queryUri=ContactsContract.Contacts.CONTENT\u URI.buildon()
.appendQueryParameter(Contacts contract.Contacts.EXTRA\u ADDRESS\u BOOK\u INDEX,“true”)
.build()
val投影=阵列(
联系人合同联系人。\u ID,
Contacts contract.Contacts.DISPLAY\u NAME,
联系人contract.Contacts.STARRED
)
val选择=Contacts contract.Contacts.STARRED+“='1'”
val cursor=context.getContentResolver().query(queryUri,
投影,选择,空,空)
while(cursor.moveToNext()){
val contactID=cursor.getString(cursor
.getColumnIndex(Contacts Contacts.Contacts.\u ID))
val intent=intent(intent.ACTION_视图)
val uri=uri.withAppendedPath(
Contacts contract.Contacts.CONTENT\u URI,contactID.toString()
intent.data=uri
val intentUriString=intent.toUri(0)
val title=cursor.getString(
cursor.getColumnIndex(Contacts contract.Contacts.DISPLAY_NAME))
contactMap[标题]=监视
}
cursor.close()
返回联系人地图
}