Я пишу приложение, которое может читать любое количество текстовых сообщений между мной и конкретным контактом. Мне удалось получить Lookup_key из ContactsContract.Contacts.CONTENT_URI, но неясно, как получить текстовые сообщения аналогичным образом.
Я пытался использовать ContactsContract.CommonDataKinds.Phone, чтобы сопоставить Lookup_key с номером телефона, а затем использовать номер телефона, чтобы выбрать текстовые сообщения. Однако номер телефона для любого контакта всегда возвращает «5». Вот мой запрос ниже.
Вот как выглядит телефонный запрос:
@SuppressLint("InlinedApi")
private static final String[] PHONE_PROJECTION = {
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY,
ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER
};
@SuppressLint("InlinedApi")
private static final String PHONE_SELECTION = ContactsContract.Data.LOOKUP_KEY + " = ?";
И я выполняю запрос через загрузчик курсора:
return new CursorLoader(
getApplicationContext(),
ContactsContract.Data.CONTENT_URI,
PHONE_PROJECTION,
PHONE_SELECTION,
phoneSelectionArgs,
null
);
Наконец, я вытащил номер:
phoneNumber = cursor.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Но это всегда 5. Он никогда не возвращает фактический номер телефона. Это правильный способ запросить номер телефона? Есть ли лучший способ читать сообщения от определенного контакта?