2011-09-06 3 views
0

J'ai attaché à obtenir tous les contacts en utilisant le code suivantTous les contacts sont retournés

getContentResolver().query(uri, null, null, null, null) 

Mais il ne retourne pas tous les contacts. Il semble qu'il ne renvoie que les contacts qui ont dans la colonne "single_is_restricted" la valeur "1", mais cette colonne ne peut pas être asseccable de l'application, je l'ai trouvé lorsque je regardais la table "contacts" directement via sqlite.

Comment puis-je obtenir tous les contacts?

Merci.

+2

Quel «uri» utilisez-vous? – Michael

Répondre

1

Vérifiez l'instruction de création pour la table/vue.

Par exemple dans ContactManager par exemple vous verrez ce bloc de code;

private Cursor getContacts() 
{ 
    // Run query 
    Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME 
    }; 
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + 
      (mShowInvisible ? "0" : "1") + "'"; 
    String[] selectionArgs = null; 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 

Si vous pouvez obtenir une exception (par exemple, vous pouvez changer la sélection ...), vous pouvez obtenir la vue/nom de la table de chat de journal, comme celui-ci (vous pouvez voir « ASDF » dans le chat journal, juste obtenir une exception);

04-28 12:16:34.682: E/AndroidRuntime(466): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.contactmanager/com.example.android.contactmanager.ContactManager}: android.database.sqlite.SQLiteException: near "'1'": syntax error: , while compiling: SELECT _id, display_name FROM view_contacts_restricted WHERE (in_visible_group =ASDF '1') ORDER BY display_name COLLATE LOCALIZED ASC 

Point est; FROM view_contacts_restricted

Et maintenant vous pouvez vérifier l'instruction create de cette vue. Vous pouvez installer une application de navigateur racine. Et copiez le fichier sqlite sur SDCARD ou installez sqlite3 sur le périphérique Android. puis ouvrez la base de données à partir de la ligne de commande;

sqlite3 '/home/semeteycoskun/Desktop/contacts2.db' 

Voir la vue;

.schema view_contacts_restricted 

Le résultat est;

CREATE VIEW view_contacts_restricted 
AS SELECT contacts._id AS _id 
,   contacts.custom_ringtone AS custom_ringtone 
,   name_raw_contact.display_name_source AS display_name_source 
,   name_raw_contact.display_name AS display_name 
,   name_raw_contact.display_name_alt AS display_name_alt 
,   name_raw_contact.phonetic_name AS phonetic_name 
,   name_raw_contact.phonetic_name_style AS phonetic_name_style 
,   name_raw_contact.sort_key AS sort_key 
,   name_raw_contact.sort_key_alt AS sort_key_alt 
,   name_raw_contact.sort_priority AS sort_priority 
,   name_raw_contact.sort_priority_alt AS sort_priority_alt 
,   name_raw_contact.sort_locale AS sort_locale 
,   name_raw_contact.sort_locale_alt AS sort_locale_alt 
,   name_raw_contact.contact_in_visible_group AS in_visible_group 
,   has_phone_number, lookup, photo_id 
,   contacts.last_time_contacted AS last_time_contacted 
,   contacts.send_to_voicemail AS send_to_voicemail 
,   contacts.starred AS starred 
,   contacts.times_contacted AS times_contacted 
,   status_update_id 
,   dirty_contact 
,   has_email 
,   link_count 
,   raw_contact_linkpriority1 
,   link_type1 
,   raw_contact_linkpriority2 
,   link_type2 
,   raw_contact_linkpriority3 
,   link_type3 
,   raw_contact_linkpriority4 
,   link_type4 
,   raw_contact_linkpriority5 
,   link_type5 
FROM contacts 
JOIN raw_contacts AS name_raw_contact ON(name_raw_contact_id=name_raw_contact._id) 
WHERE single_is_restricted=0; 

Si créer des déclarations comprennent single_is_restricted = 0 vous ne pouvez pas accéder aux lignes single_is_restricted = 1.

[désolé pour mon anglais]

0

Certains fabricants comme Samsung ont traite Facebook dans lequel Facebook permet de synchroniser les contacts de l'appareil avec des noms, téléphones, photos, etc., mais ces contacts ne sont pas accessibles via les contacts Apis.

C'est la raison pour laquelle certains contacts ne sont pas accessibles par votre application, mais sont visibles dans l'application Contacts de stock.

Questions connexes