여러 가지 방법이 있지만 가장 좋은 방법은 해당 연락처/번호로 대화 스레드의 스레드 ID를 찾은 다음 모든 메시지의 스레드 ID를 쿼리하는 것입니다.
주 (자신의 스레드 ID로) 다른 API 레벨, 모든 스레드 등
쿼리 듀얼 SIM, MMS/SMS 메시지와 장치에 문제가 많이 있다는 것을 :
// This projection is suitable for API-19 and above only
String[] projection = { Threads._ID, Threads.RECIPIENT_IDS, "sort_index", Threads.SNIPPET }
Uri uri = Threads.CONTENT_URI.buildUpon().appendQueryParameter("simple", "true").build();
Cursor cur = getContentResolver().query(uri, projection, selection, null, "sort_index" + " DESC");
은
RecipientId와 전화 번호를 변환하려면 Android의 RecipientIdCache class을 프로젝트에 복사하면됩니다. id를 number로 변환하는 데 사용되는 싱글 톤 클래스입니다. 스레드 ID로 모든 메시지
검색어 :
// This projection is suitable for API-19 and above only
String[] projection = new String[]{
MmsSms.TYPE_DISCRIMINATOR_COLUMN,
Telephony.Sms._ID,
Telephony.Sms.BODY,
"sort_index",
Telephony.Sms.DATE_SENT
};
Uri uri = ContentUris.withAppendedId(Threads.CONTENT_URI, id);
Cursor cur = getContentResolver().query(uri, projection, null, null, null);
는 recipientId가 같은 값 ContactsContract.Contacts._ID입니다인가? 그게 내가 가진거야. 사용자는 연락처 목록에서 a를 선택하고 그 연락처에 대한 모든 SMS를 읽어야합니다. 또한 RecipientIdCache는 content : // mms-sms/canonical-address 및 content : // mms-sms/canonical-addresses를 사용합니다. 이 둘의 차이점은 무엇입니까? – dumbkam
아니요, contact-id가 recipient-id가 아니고 recipient-id가 sms 대화마다 고유 ID 인 경우 연락처, 연락처가 아닌 전화 번호, 전화 번호 그룹, 'GOOGLE'(유효한 SMS 주소)과 같은 특별한 비 전화 주소 – marmor