2

特定の連絡先が特定のグループのメンバーであるかどうかを確認する必要があります。私は以下のコードで作業しており、Gingerbreadを実行している受話器を使用して動作することを証明しました。ただし、Androidバージョン4.0.3を実行しているHTC One Sで実行しようとしましたが、失敗します。API仕様は変更されましたか?私のコードは以下の通りです。

public boolean checkGroupMembership(String groupID, String contactID, Context ctx) {
            ContentResolver groupContentResolver = ctx.getContentResolver();
                        String select = "contact_id=" + contactID + 
                    " AND " + GroupMembership.GROUP_ROW_ID + " = " + groupID +
                    " AND mimetype='vnd.android.cursor.item/group_membership'";

            Cursor contactGroupCursor =  
                    groupContentResolver.query(
                        Data.CONTENT_URI, 
                        new String[] { GroupMembership.CONTACT_ID,  GroupMembership.GROUP_ROW_ID, GroupMembership.IN_VISIBLE_GROUP }, 
                        select,
                        null, 
                        null);
            int records = contactGroupCursor.getCount();
            try {
            while(contactGroupCursor.moveToNext()){
                String ContactID = contactGroupCursor.getString(contactGroupCursor.getColumnIndexOrThrow(GroupMembership.CONTACT_ID));
                String groupRowId = contactGroupCursor.getString(contactGroupCursor.getColumnIndexOrThrow(GroupMembership.GROUP_ROW_ID));
                String InVisiblegroup = contactGroupCursor.getString(contactGroupCursor.getColumnIndexOrThrow(GroupMembership.IN_VISIBLE_GROUP));

                Log.d("DEBUG", "groupSourceId in checkGroupMembership: " + groupRowId + "  InVisiblegroup = " + InVisiblegroup);
                Log.d("DEBUG", "ContactID in checkGroupMembership: " + ContactID);          

                }       
            } 
            finally 
            {
                contactGroupCursor.close();
            }

            // see if the contact is in this group
            if (records > 0) {
                return true;
            }
            else {


            return false;
            }
        }

    }

さらに、クエリを変更して、連絡先がメンバーになっているグループを純粋に検索します。

String select = "contact_id=" + contactID;

結果は次のデバッグ出力になります。groupRowIDがグループIDのように見える場合もあれば、連絡先番号または連絡先の名前である場合もあります。テストを呼び出すために自宅の固定電話を使用していることに注意してください。これが表示されています。また、受話器で定義されているグループは10個だけで、出力には11、12、13のIDが出力されます...何かが足りない可能性がありますか?私が渡しているcontact_idがCoworkersグループ(私の電話ではgroup_ID 5)のメンバーであることは確かに知っていますが、これがICSで返されることはありません。両方の携帯電話のコンタクトマネージャーアプリを使用して、HOMEのグループメンバーシップを独自に確認しました。

11-04 11:48:21.980:D / DEBUG(10145):checkGroupMembershipで選択:contact_id = 133 11-04 11:48:21.990:D / DEBUG(10145):checkGroupMembershipのレコード数:13 11-04 11 :48:22.000:D / DEBUG(10145):checkGroupMembershipのgroupRowId:null InVisiblegroup = 1 11-04 11:48:22.000:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.000: D / DEBUG(10145):checkGroupMembershipのgroupRowId:InVisiblegroup = 1 11-04 11:48:22.000:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.000:D / DEBUG(10145) :checkGroupMembershipのgroupRowId:004-414-83326995 InVisiblegroup = 1 11-04 11:48:22.000:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.000:D / DEBUG(10145): checkGroupMembershipのgroupRowId:014-833-26995 InVisiblegroup = 1 11-04 11:48:22.000:D / MYOB(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / MYOB(10145):checkGroupMembershipのgroupRowId:01483326995 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:10 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11: 48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:11 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:12 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145) :checkGroupMembershipのgroupRowId:13 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:7 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:8 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145) :checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:9 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID: 133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:HOME InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133D / DEBUG(10145):checkGroupMembershipのgroupRowId:7 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145 ):checkGroupMembershipのgroupRowId:8 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId :9 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:HOME InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133D / DEBUG(10145):checkGroupMembershipのgroupRowId:7 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145 ):checkGroupMembershipのgroupRowId:8 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId :9 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId:HOME InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133D / DEBUG(10145):checkGroupMembershipのgroupRowId:8 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145 ):checkGroupMembershipのgroupRowId:9 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId :HOME InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133D / DEBUG(10145):checkGroupMembershipのgroupRowId:8 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145 ):checkGroupMembershipのgroupRowId:9 InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのgroupRowId :HOME InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133checkGroupMembershipのgroupRowId:HOME InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133checkGroupMembershipのgroupRowId:HOME InVisiblegroup = 1 11-04 11:48:22.030:D / DEBUG(10145):checkGroupMembershipのContactID:133

PS十分な特権を持っている人は、サイトにタグとして「GroupMembership」を追加してください。

4

2 に答える 2

0

Honeycombと4.0.3の間でグループメンバーシップに変更はありません。

LogCatを使用したり、ListViewやスクリーンショットなどを使用したりすると、これらすべてを読みやすくなります。あなたの問題が何であるかを理解するのは難しいです。ContactsContract.Groupsのダンプを実行して、データベースに定義されているグループを確認できます。両方の受話器がまったく同じデータを持っていることが絶対に確実でない限り、違いを見つけるでしょう。それらが完全に同じデータを持っていることを確認する唯一の方法は、連絡先データをそれらから消去し、両方を小さなテストデータセットに同期することです。

于 2012-11-04T19:20:00.647 に答える
0

下の画像は、まったく同じコードを使用して生成されたGingerbread(Cyanogen)とICS(HTC)のグループのダンプを示しています。ご覧のとおり、データの表示方法はかなり異なります。何らかの理由で、グループはICSである程度重複しています。したがって、グループ_IDを使用してルックアップを実行することを計画している場合、異なるバージョン間でこれをどのように管理するかが問題になります。ICSの連絡先アプリでは各グループが1回だけ表示されるので、これがどのIDを参照しているかを知るにはどうすればよいですか?

于 2012-11-08T09:07:43.950 に答える