Meine App erstellt einen Kontakt im Android-Kontaktbuch mit einem speziellen SYNC4-Schlüssel, so dass wir unseren speziellen Kontakt (getrennt von anderen Android-Kontakten) nachschlagen können. Wir können den Kontakt auf einem HTC 10-Gerät jedoch nicht lesen. Ich habe über einige Unterschiede zwischen HTC-Geräten und anderen Android-Geräten bezüglich der Handhabung von Kontakten gelesen, aber leider keine gute Erklärung oder Lösung für dieses Problem gefunden.Abrufen von Android-Kontakt mit contentResolver auf HTC 10 gibt kein Ergebnis zurück
Die Schaffung des Kontakts funktioniert wie folgt:
private static final String SPECIAL_CONTACT_KEY = "_MY_SPECIAL_CONTACT_KEY_";
// Create an operation with the special SYN4 key
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder.withValue(RawContacts.ACCOUNT_TYPE, null);
builder.withValue(RawContacts.ACCOUNT_NAME, null);
builder.withValue(RawContacts.SYNC4, SPECIAL_CONTACT_KEY);
ops.add(builder.build());
// Add a 'given name' to the list of operations
builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(StructuredName.GIVEN_NAME, "givenName");
ops.add(builder.build());
// Add a 'phone number with type work' to the list of operations
builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
builder.withValue(Phone.TYPE, Phone.TYPE_WORK);
builder.withValue(Phone.NUMBER, "phoneNumber");
ops.add(builder.build());
// Add a 'note' to the list of operations (to be able to visually discern the contact from other contacts)
builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
builder.withValue(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
builder.withValue(Note.NOTE, "note");
ops.add(builder.build());
ContentProviderResult[] result = App.getContext().getContentResolver().applyBatch(AUTHORITY, ops);
Der Kontakt (e) kann wie folgt ermittelt werden:
// Retrieve our own contacts using the special SYNC4 key
Uri uri = Phone.CONTENT_URI;
String[] projection = {Phone.NUMBER};
String mySpecialSelection = RawContacts.SYNC4 + "='" + SPECIAL_CONTACT_KEY + "'";
Cursor cursor = App.getContext().getContentResolver().query(uri, projection, mySpecialSelection, null, null);
Der Cursor mit der korrekten Kontaktdaten auf alle Gerät gefüllt ist , aber auf dem HTC ist der Cursor leer.
, warum Sie mit 'SYNC4'? – pskink
Um ehrlich zu sein, wurde es bereits von einem Kollegen benutzt, und mir wurde gesagt, dass es ein spezifischer Marker ist, um unseren Kontakt von anderen zu unterscheiden. Ich bin nicht sicher, was es tut, aber wenn Sie einen Rat für einen besseren Marker haben, sagen Sie bitte ;-) Sie denken, dass es mit dem HTC Problem zusammenhängt? –