Androidデバイスに連絡先のリストがあります。すべての連絡先の関連付けられたgroupIdsとGroupNameを取得したいと思います。連絡先Contract.Groups._IDを使用してIDを取得しようとしましたが、取得できません。誰かが連絡先のgroupIDを取得する他の方法を教えてもらえますか?
3315 次
1 に答える
7
これが私のやり方です。2 つのクエリを実行しないことで、いじり回してより高速な解決策を見つけることができるでしょう。
アイデアは、を使用してデータテーブルからグループの行 ID を取得することGroupMembership.GROUP_ROW_ID
です。行 ID を取得したら、それを使用して Groups テーブルにクエリを実行し、グループの名前 (タイトル) を取得します。
多くの場合Groups.TITLE
、名前はあまり適切ではなく、おそらくフォーマットするか、検索してより良い名前を見つける必要があります。
連絡先 ID を取得するコードは次のとおりです。
public long getGroupIdFor(Long contactId){
Uri uri = Data.CONTENT_URI;
String where = String.format(
"%s = ? AND %s = ?",
Data.MIMETYPE,
GroupMembership.CONTACT_ID);
String[] whereParams = new String[] {
GroupMembership.CONTENT_ITEM_TYPE,
Long.toString(contactId),
};
String[] selectColumns = new String[]{
GroupMembership.GROUP_ROW_ID,
};
Cursor groupIdCursor = mContext.getContentResolver().query(
uri,
selectColumns,
where,
whereParams,
null);
try{
if (groupIdCursor.moveToFirst()) {
return groupIdCursor.getLong(0);
}
return Long.MIN_VALUE; // Has no group ...
}finally{
groupIdCursor.close();
}
}
グループのタイトルを取得するコードは次のとおりです。
public String getGroupNameFor(long groupId){
Uri uri = Groups.CONTENT_URI;
String where = String.format("%s = ?", Groups._ID);
String[] whereParams = new String[]{Long.toString(groupId)};
String[] selectColumns = {Groups.TITLE};
Cursor c = mContext.getContentResolver().query(
uri,
selectColumns,
where,
whereParams,
null);
try{
if (c.moveToFirst()){
return c.getString(0);
}
return null;
}finally{
c.close();
}
}
于 2012-08-09T18:42:32.360 に答える