Kann keine Kontakte in RawContacts finden

Ich versuche, eine Kontakt-Management-Anwendung zu erstellen. Auf meinem Telefon habe ich Kontakte von ein paar Konten einschließlich Facebook und HTC Facebook. Aus irgendeinem Grund kann ich diese Kontakte aus der RawContacts Tabelle von ContactsContract nicht abrufen:

 managedQuery(ContactsContract.RawContacts.CONTENT_URI, new String[] { ContactsContract.RawContacts._ID, ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE, }, ContactsContract.RawContacts.ACCOUNT_TYPE + " = 'com.facebook.auth.login'", null, null) 

Diese Abfrage gibt keine Ergebnisse zurück. Wenn ich den Account-Typ mit com.htc.socialnetwork.facebook , com.htc.socialnetwork.facebook ich immer noch keine Ergebnisse. Es gibt viele Facebook-Kontakte auf meinem Handy; Wie man sie abruft?

  • LinearLayout Höhe in onCreate ist 0
  • Android ViewPager ändert automatisch die Seite
  • Overlay-Aktionsleiste mit einer lichtdurchlässigen Statusleiste
  • Kann Datei nicht mit der Datei Klasse löschen
  • Wie benutzt man onResume ()?
  • Simulieren Sie eine langsame Internetverbindung auf einem REAL-Gerät?
  • NotifyDataSetChanged () macht die Liste auffrischen und blättert nach oben zurück
  • Wie bekomme ich Android Studio, um die Datei als Quelle zu erkennen (Test)
  • Umwandlung von Java in iOS
  • ContentObserver für das Anhören von Kontaktänderungen
  • Android Honeycomb: Wie man Fragmente in einem FrameLayout ändert, ohne sie neu zu erstellen?
  • Ein Entwickler-Tool zum Entwerfen einer SQLite-Datenbank für Android
  • 3 Solutions collect form web for “Kann keine Kontakte in RawContacts finden”

    Ja, die Facebook-Kontakte sind gesichert, können aber mit einem kleinen, sneaky SQLite Injection entführt werden. NEIN – ich werde hier nicht auf dieser Seite posten, aber gibt es einen Grund, warum du nicht nur Facebook-Authentifizierung nimmst und die Kontakte bekommst? Die Facebook-Kontakte haben in letzter Zeit noch nichts Brauchbares, und es ist einfach nur sicherer und eher zu arbeiten

    Ich glaube, ich habe die Antwort hier gefunden: Wie bekomme ich die Kontaktadresse eines Kontakts aus native Kontakte / Content Resolver?

    Scheint, dass der Zugriff auf Facebook-Kontakte eingeschränkt ist.

    Es gibt definitiv keine Möglichkeit, dies in einer üblichen Weise zu tun. Also, wir müssen eine SQLi-Injektion verwenden (wie roger kommentiert), um in der Lage sein, die Kontaktdatenbank zu hacken und die Facebook-Avatare zu bekommen. Der folgende Code funktioniert auf den meisten Motorolas, die Motoblur verwenden, auf Android 2.2 oder höher:

     public static Bitmap loadFacebookAvatar(Context context, long personId) { String[] rawProjection = {ContactsContract.RawContacts._ID}; String contactIdAssertion = ContactsContract.RawContacts.CONTACT_ID + " = " + personId; String rawWhere = new StringBuilder() .append(contactIdAssertion).append(") UNION ALL SELECT ") .append(ContactsContract.RawContacts._ID).append(" FROM view_raw_contacts WHERE (") .append(contactIdAssertion).toString(); Cursor query = context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, rawProjection, rawWhere, null, null); if (query != null && query.moveToFirst()) { do { long id = query.getLong(query.getColumnIndex(ContactsContract.RawContacts._ID)); String[] projection = {ContactsContract.CommonDataKinds.Photo.PHOTO}; Uri uri = ContactsContract.Data.CONTENT_URI; String mimeTypeAssertion = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'"; String photoAssertion = ContactsContract.CommonDataKinds.Photo.PHOTO + " IS NOT NULL"; String rawContactIdAssertion = ContactsContract.CommonDataKinds.Photo.RAW_CONTACT_ID + " = " + id; String where = new StringBuilder().append(mimeTypeAssertion).append(" AND ") .append(photoAssertion).append(" AND ").append(rawContactIdAssertion) .append(") UNION ALL SELECT ").append(ContactsContract.CommonDataKinds.Photo.PHOTO) .append(" FROM view_data WHERE (").append(photoAssertion).append(" AND ") .append(rawContactIdAssertion).toString(); Cursor photoQuery = context.getContentResolver().query(uri, projection, where, null, null); if (photoQuery != null && photoQuery.moveToFirst()) { do { byte[] photoData = photoQuery.getBlob(photoQuery.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO)); if (photoData != null) { return BitmapFactory.decodeByteArray(photoData, 0, photoData.length, null); } } while (photoQuery.moveToNext()); } } while (query.moveToNext()); } return null; } 

    Für andere Handys müssen Sie die Kontaktdatenbank erhalten und analysieren, um festzustellen, wie Sie die SQL Injection anwenden, die ein verwurzeltes Telefon benötigt.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.