Beim Abrufen einer Mobiltelefonnummer von einer eingehenden SMS wird der Ländercode angehängt.
Jetzt, da der entsprechende Kontakt in der Datenbank nicht den Ländercode enthalten kann den Kontaktnamen zu bekommen Ich verwende:Android - Kontakt von Nummer mit Ländercode
public static String getContactName(String number, Context context) {
try {
Uri personUri = Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim()));
String selection = PhoneLookup.NUMBER + " LIKE %" + number.trim() + "%";
Cursor cur = context.getContentResolver().query(personUri,
new String[] {
PhoneLookup.DISPLAY_NAME
},
selection, null, null);
if (cur.moveToFirst()) {
String str = cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
cur.close();
return str;
}
} catch (Exception e) {
//e.printStackTrace();
return number;
}
return number;
}
Das funktioniert perfekt, wenn ich in einer genauen Übereinstimmung oder eine teilweise Übereinstimmung passieren. Allerdings, wenn ich den Kontakt-ID erhalten möchte ich diesen Code bin mit:
public static Contact getContact(String number, ContentResolver contentResolver) {
Contact contact = new Contact(-1, number);
try {
Uri personUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number));
String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + number + "%'";
Cursor cur = contentResolver.query(personUri,
new String[] {
ContactsContract.CommonDataKinds.Phone.CONTACT_ID, PhoneLookup.DISPLAY_NAME
},
selection, null, null);
if (cur.moveToFirst()) {
contact = new Contact(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID))),
cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME)));
}
cur.close();
} catch (Exception e) {}
return contact;
}
Das funktioniert perfekt, wenn die Zahl eine exakte Übereinstimmung ist, aber wenn es nicht ist es gibt nichts zurück. Ich brauche diese Methode, um die ID des Kontakts zu finden, wo seine Nummer als "01111111111" gespeichert ist und die eingehende Nummer "+441111111111" ist. Obwohl sie verschiedene URIs betrachten, ist der Auswahlcode ziemlich gleich, daher bin ich mir nicht sicher, warum das nicht für die Sekunde funktioniert.
Irgendwelche Ideen?
Das sieht mehr wie ich aus - Ich habe nicht den Code vor meinem Atm, aber ich werde ein wenig einchecken und sehen, ob das für mich funktioniert, danke – crazyfool
Es sieht aus wie es nicht mit Indian funktioniert oder russische Zahlen. Zum Beispiel: Kontakt mit der Nummer 89997654321 und ein eingehender Anruf von +79997654321 – Gaket