0

経由で連絡先の詳細 (具体的には住所) を取得するクエリを実行していますContactsContract。ポイントは、WhatsApp、LinkedIn、Skype などの他のアプリケーションから同期されている連絡先をスキップしたいということです...

私のコードは次のとおりです。

Uri uri = StructuredPostal.CONTENT_URI;
String[] sqlSelect = new String[] { StructuredPostal.FORMATTED_ADDRESS, StructuredPostal.DISPLAY_NAME, StructuredPostal.STREET, StructuredPostal.CITY, StructuredPostal.POSTCODE, StructuredPostal.COUNTRY };
String sqlWhere = StructuredPostal.MIMETYPE + "=?" + " AND " +
            "(" + StructuredPostal.STREET + " LIKE '%" + queryString + "%'" + " OR " + 
            StructuredPostal.CITY + " LIKE '%" + queryString + "%'" + " OR " +
            StructuredPostal.POSTCODE + " LIKE '%" + queryString + "%'" + " OR " +
            StructuredPostal.COUNTRY + " LIKE '%" + queryString + "%')";
String[] sqlWhereParams = new String[]{ StructuredPostal.CONTENT_ITEM_TYPE };
String sortOrder = StructuredPostal.STREET + " ASC";

Cursor cursor = this.getContentResolver().query(uri, sqlSelect, sqlWhere,  sqlWhereParams, sortOrder);
    if (cursor.moveToFirst()) {
        do {
            String formattedAddress = cursor.getString(cursor.getColumnIndex(StructuredPostal.FORMATTED_ADDRESS));
            String displayName = cursor.getString(cursor.getColumnIndex(StructuredPostal.DISPLAY_NAME));
            String street = cursor.getString(cursor.getColumnIndex(StructuredPostal.STREET));
            String city = cursor.getString(cursor.getColumnIndex(StructuredPostal.CITY));
            String postcode = cursor.getString(cursor.getColumnIndex(StructuredPostal.POSTCODE));
            String country = cursor.getString(cursor.getColumnIndex(StructuredPostal.COUNTRY));
            Log.d(TAG, formattedAddress + " " + displayName + " " + street + " " + city + " " + postcode + " " + country);

        } while (cursor.moveToNext());
    }

出力は、LogCatアドレス帳に手動で追加した連絡先を正しく印刷しています。

<postal_address> <contact_full_name> <street> <city> <postcode> <country>

しかし、サードパーティのアプリからインポートされたものは (LinkedIn) のように印刷されています:

<email> <contact_full_name> <email> null null null

あるべき場所 (住所が不明な場合):

null <contact_full_name> null null null null

サードパーティのアプリが連絡先を間違って使用していませんか? サードパーティの同期された連絡先をスキップする方法はありますか?

4

1 に答える 1

0

リンクされたアカウントをフィルタリングすることで実行できます。Google からのアカウントのみをフィルタリングすることにしました ( ContactsContract.RawContacts.ACCOUNT_TYPE + "= 'com.google'):

String sqlWhere = StructuredPostal.MIMETYPE + "=?" + " AND " + ContactsContract.RawContacts.ACCOUNT_TYPE + "= 'com.google' AND " +
            "(" + StructuredPostal.STREET + " LIKE '%" + queryString + "%'" + " OR " + 
            StructuredPostal.CITY + " LIKE '%" + queryString + "%'" + " OR " +
            StructuredPostal.POSTCODE + " LIKE '%" + queryString + "%'" + " OR " +
            StructuredPostal.COUNTRY + " LIKE '%" + queryString + "%')";
于 2013-04-29T11:00:49.580 に答える