2

現在、アドレス帳から連絡先を取得する次のコードがあります。

Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    Cursor cursor = getContentResolver().query(uri, projection, selection, null, sortOrder); 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_list_item_multiple_choice, 
            cursor, 
            new String[] {ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts._ID}, 
            new int[] { android.R.id.text1},0);
    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    setListAdapter(adapter);

ただし、これにより、Nexus 4 で Facbook の連絡先も返されます。選択に問題はありますか?

ありがとう

4

2 に答える 2

7

ContactsContract.Contacts.HAS_PHONE_NUMBERプロジェクションとセレクションの両方に追加することで、電話番号を持つ連絡先のみが含まれるようにクエリ結果をフィルタリングできます。

2 番目と 3 番目のステートメントを次のように変更します。

String[] PROJECTION = { 
ContactsContract.Contacts._ID, 
ContactsContract.Contacts.DISPLAY_NAME, 
ContactsContract.Contacts.HAS_PHONE_NUMBER
};
String selection = "(" + ContactsContract.Contacts.IN_VISIBLE_GROUP + 
" = '1' AND (" + ContactsContract.Contacts.HAS_PHONE_NUMBER + " != 0 ))";

結果のカーソルには、電話番号を持つ連絡先のみが含まれます。

于 2013-01-26T22:36:42.787 に答える
-1

Facebookの連絡先は基本的に...連絡先なので、通常の動作だと思う場合は、コードによって取得されます。それをフィルタリングする最良の方法は、返されたデータをループして、番号のないデータを削除することだと思います。

于 2013-01-26T22:15:48.080 に答える