16 Stimmen

So öffnen Sie eine Kontaktkarte in Android nach ID

Ist es möglich, eine Android-Kontaktkarte über die ID des Kontakts zu öffnen? Es funktioniert mit der Rufnummer. Hier ist ein Beispiel, wenn ich benutze

Intent i = new Intent();
i.setAction(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT);
i.setData(Uri.fromParts("tel", "123456", null)); //<---- Change here from Phone to IDcontext.startActivity(i);

Aber ich möchte diese Kontaktkarte nach ID öffnen, zum Beispiel wenn sich die Telefonnummer des Kontakts ändern würde.

44voto

Thorstenvv Punkte 5241

Verwenden Sie ACTION_VIEW und erstellen Sie entweder einen Kontakt-URI unter Verwendung der Kontakt-ID oder verwenden Sie den Kontakt-Lookup-URI, wenn Sie ihn bereits haben (bevorzugt).

    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactID));
    intent.setData(uri);
context.startActivity(intent);

6voto

Jean Hominal Punkte 16038

Sie würden den folgenden URI verwenden:

Uri.Builder newUriBuilder = ContactsContract.Contacts.CONTENT_LOOKUP_URI.buildUpon();
newUriBuilder.appendPath("/").appendPath(theContactKey)
i.setData(newUriBuilder.build());

Weitere Einzelheiten über die Funktionsweise dieser URI finden Sie in der API-Dokumentation für CONTENT_LOOKUP_URI .

4voto

serg66 Punkte 1148

Ich habe versucht, eine Kontaktkarte mit den hier aufgeführten Methoden zu öffnen, aber irgendwie wurde die Kontaktaktivität sofort nach dem Öffnen geschlossen.

Es schien, dass die Kontaktaktivität meine alte Inhaltsuri nicht akzeptierte.

Ich habe dieses Problem mit der Methode getLookupUri (long contactId, String lookupKey) Methode der ContactsContract.Contacts Klasse, um die richtige Inhaltsuri zu erhalten https://developer.Android.com/reference/Android/provider/ContactsContract.Contacts.html#getLookupUri(long, java.lang.String)

Der Code zum Öffnen einer Kontaktkarte lautet also:

Intent intent = new Intent(Intent.ACTION_VIEW);
String lookupKey = phonesCursor.getString(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.LOOKUP_KEY));
long contactId = phonesCursor.getLong(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
Uri uri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
intent.setData(uri);
startActivity(intent);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X