짧 은 컬러 메시지 세 션 목록 가 져 오기content://mms-sms/conversations

http://kevinlynx.iteye.com/blog/857633
http://topic.csdn.net/u/20100804/12/67607078-e17c-4afc-8228-9dcf9a366b03.html?seed=1998627157&r=76024741#r_76024741 안 드 로 이 드 의 문자 메 시 지 는 정식 콘 텐 츠 provider 가 사용 할 수 없 으 며 공식 문서 에서 정 의 를 제공 하지 않 았 습 니 다.하지만 URI 를 스스로 정의 하고 문자 내용 을 조회 할 수 있다.예컨대conetent://sms모든 문자 가 있 는 path 입 니 다.
문 자 를 세 션 별로 분류 하려 면 원래 나 는 모든 문 자 를 조회 한 후에 threadid 분류.시스템 자체 메시지 프로그램 은 세 션 디 스 플레이 인터페이스 를 포함 하고 각 항목 은 연락처, 문자 수량, 첫 번 째 문자 등 내용 을 포함한다.내 프로그램 이 처리 하 는 문자 가 많 을 때 한 번 에 모든 문 자 를 조회 하 는 것 이 느 려 진다.(세 션 마다 연락처 정 보 를 조회 하면 더 느 립 니 다)
시스템 문자 코드 를 보 니 모든 문자 내용 을 조회 하지 않 고 세 션 정보 만 조회 할 수 있 었 다.일부 코드 를 찾 지 못 해서 어떻게 했 는 지 몰 랐 다.telphony provider 의 코드 를 보고 나 서 야 하나, 둘 을 알 게 되 었 다.
실제로 문자 데이터베이스 (mmssms. db) 에는 세 션 정 보 를 저장 하 는 표 가 하나 도 없다.
시스템 이 제공 하 는 content provider 에 서 는 세 션 정 보 를 직접 조회 하 는 것 을 지원 합 니 다.다만, 그 실현 방식 은 기 존의 표 가 아니 라 SQL 문 구 를 통 해 여러 표 에서 데 이 터 를 추출 하여 완성 한 것 이다.이 실현 방식 에 대해 서 는 이 게시 물 에서 도 언급 됐다.
실현 방식 은 깊이 연구 하지 않 는 다. 왜냐하면 나 는 SQL 조회 에 대해 잘 모 르 기 때문이다.직접 사용 방법:
	public static final Uri MMSSMS_FULL_CONVERSATION_URI = Uri.parse("content://mms-sms/conversations");
	public static final Uri CONVERSATION_URI = MMSSMS_FULL_CONVERSATION_URI.buildUpon().
		appendQueryParameter("simple", "true").build();

simple = true 를 지정 하면 다음 과 같은 대략적인 세 션 데 이 터 를 추출 할 수 있 습 니 다.
 
    private static final int ID             = 0;
    private static final int DATE           = 1;
    private static final int MESSAGE_COUNT  = 2;
    private static final int RECIPIENT_IDS  = 3;
    private static final int SNIPPET        = 4;
    private static final int SNIPPET_CS     = 5;
    private static final int READ           = 6;
    private static final int TYPE           = 7;
    private static final int ERROR          = 8;
    private static final int HAS_ATTACHMENT = 9;

열 이름: threads 표 죠?
    private static final String[] ALL_THREADS_PROJECTION = {
        "_id", "date", "message_count", "recipient_ids",
        "snippet", "snippet_cs", "read", "error", "has_attachment"
    };

참고:
http://stackoverflow.com/questions/3012287/how-to-read-mms-data-in-android
그 중:
  • _id is the ID of the message. Captain obvious to the rescue? Not really. This ID can be used to retrieve detailed information using either content://sms or content://mms .
  • body The content of the last SMS on this conversation. If it's an MMS, even if it has a text part, this will be null .
  • thread_id is the ID of the conversation
  • date no explanation needed.
  • "ct_t"  정보 유형, "application / vnd. wap. multipart. related" 는 컬러 메시지 임 을 나 타 냅 니 다. 참고: 쿼 리 content://mms-sms/conversations 하면 각 대화 에서 마지막 SMS 또는 MMS 인 다른 대화 목록 을 반환 합 니 다. 쿼 리 _id 하면 ID 가 있 는 대화 에서 각 SMS 및 / 또는 MMS 를 반환 합 니 다 content://mms-sms/conversations/xxx. 1. messagecount 는 이 세 션 의 메시지 수량 입 니 다.2、recipient_ids 는 연락처 ID 입 니 다. 이 ID 는 연락처 표 의 가 아 닙 니 다.지향 표  canonical_address 의 id, canonicaladdress 이 표 역시 mmssms. db 에 있 습 니 다. recipient 를 비 추 었 습 니 다.ids 에서 전화번호 로 갑 니 다. 즉, 최종 적 으로 연락처 정 보 를 얻 으 려 면 전화 번 호 를 통과 해 야 합 니 다.  3. snippet 가 마지막 으로 받 거나 보 낸 문자;모든 데이터 의 유형 은 대체적으로 다음 과 같다.
  • 			long id = cursor.getLong(ID);
    			long date = cursor.getLong(DATE);
    			long msgCount = cursor.getLong(MESSAGE_COUNT);
    			String recipIDs = cursor.getString(RECIPIENT_IDS);
    			String snippet = cursor.getString(SNIPPET);
    			long snippetCS = cursor.getLong(SNIPPET_CS);
    			long read = cursor.getLong(READ);
    			long type = cursor.getLong(TYPE);
    			long error = cursor.getLong(ERROR);
    			long hasAttach = cursor.getLong(HAS_ATTACHMENT);
    

    좋은 웹페이지 즐겨찾기