我正在尝试将所有联系人都放在Android联系人的收藏夹列表中。目前,我可以获取所有组ID,包括最喜欢的组ID。但似乎没有联系人将组ID作为最喜欢的组ID。
我正在尝试获取每个组中的所有组ID和联系人。打印两个列表后,我发现收藏夹的组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();
答案 0 :(得分:23)
您可以使用STARRED课程中的ContactsContract.Contact字段。如果您将查询更改为:
Cursor cursor = this.managedQuery(
ContactsContract.Contacts.CONTENT_URI, projection, "starred=?",
new String[] {"1"}, null);
这应返回Android上默认通讯录应用中“收藏夹”标签中显示的所有联系人列表。
答案 1 :(得分:5)
完整答案,包括用于打开与意图的联系的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;
}
答案 2 :(得分:1)
Ty与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
}