public Dialogue FindDialogue(long thread_id) { if (_TotalDialogueSet.IsContain(thread_id)) { return(_TotalDialogueSet[thread_id]); } return(null); }
//MMS DB 조회하여 address, thread_id만 수집한 목록을 반환함. private DialogueSet LoadMMSMetaDatas() { DialogueSet dialogueSet = new DialogueSet(); ContentResolver cr = Application.Context.ContentResolver; Uri uri = Uri.Parse("content://mms/"); string[] projection = new string[] { "DISTINCT thread_id", "_id", "ct_t" }; string selection = "thread_id IS NOT NULL) GROUP BY (thread_id"; ICursor cursor = cr.Query(uri, projection, selection, null, null); if (cursor != null) { if (cursor.Count > 0) { while (cursor.MoveToNext()) { string id = cursor.GetString(cursor.GetColumnIndex("_id")); string mmsType = cursor.GetString(cursor.GetColumnIndex("ct_t")); long thread_id = cursor.GetLong(cursor.GetColumnIndexOrThrow("thread_id")); if ("application/vnd.wap.multipart.related".Equals(mmsType) || "application/vnd.wap.multipart.mixed".Equals(mmsType)) { //this is MMS Dialogue objDialogue = new Dialogue(); objDialogue.Thread_id = thread_id; objDialogue.Address = GetAddress(id); if (!dialogueSet.IsContain(thread_id)) { dialogueSet.DialogueList.Add(thread_id, objDialogue); } else { System.Diagnostics.Debug.WriteLine("DEBUG : LoadMMSMetaDatas duplication thread_id"); } } else { //this is SMS //throw new Exception("알 수 없는 MMS 유형"); } } } cursor.Close(); } return(dialogueSet); }
//연락처에 없는 대화 중 수신 메시지만 메모리에 올린다. inboxType으로 송신/수신 메시지만 불러오는것도 가능. public void LoadUnknownMetaDatas() { //SMS, MMS 메타데이터(주소와 thread_id)만 수집 DialogueSet smsMetaDatas = LoadSMSMetaDatas(); DialogueSet mmsMetaDatas = LoadMMSMetaDatas(); //mms메타데이터와 smsMetaData를 병합, sms메타데이터 리스트에 mms메타데이터를 넣는다. foreach (Dialogue objDialogue in mmsMetaDatas.DialogueList.Values) { //mms만 있는 경우 리스트에 추가 if (!smsMetaDatas.IsContain(objDialogue.Thread_id)) { smsMetaDatas.DialogueList.Add(objDialogue.Thread_id, objDialogue); } //mms와 sms가 둘다 있는 경우 sms 리스트에 mms를 하나씩 추가함. else { foreach (MultiMediaMessage mms in objDialogue.TextMessageList) { smsMetaDatas.DialogueList[objDialogue.Thread_id].Add(mms); } } } //연락처에 없는 놈들만 찾는다. foreach (Dialogue objDialogue in smsMetaDatas.DialogueList.Values) { if (ContactDBManager.Get().GetContactDataByAddress(objDialogue.Address, false) == null) { if (!_UnknownDialogueSet.IsContain(objDialogue.Thread_id)) { _UnknownDialogueSet.DialogueList.Add(objDialogue.Thread_id, objDialogue); } else { _UnknownDialogueSet.DialogueList[objDialogue.Thread_id] = objDialogue; } } } }
//------------------------------------------------------------- //처음사용자용 //SMS DB 조회하여 address, thread_id만 수집한 목록을 반환함. private DialogueSet LoadSMSMetaDatas() { DialogueSet dialogueSet = new DialogueSet(); ContentResolver cr = Application.Context.ContentResolver; Uri uri = Uri.Parse("content://sms/"); string[] projection = { "DISTINCT address", "thread_id" }; string selection = "address IS NOT NULL) GROUP BY (address"; ICursor cursor = cr.Query(uri, projection, selection, null, null); if (cursor != null) { if (cursor.Count > 0) { while (cursor.MoveToNext()) { string address = cursor.GetString(cursor.GetColumnIndexOrThrow("address")); long thread_id = cursor.GetLong(cursor.GetColumnIndexOrThrow("thread_id")); Dialogue objDialogue = new Dialogue(); objDialogue.Address = address; objDialogue.Thread_id = thread_id; if (!dialogueSet.IsContain(thread_id)) { dialogueSet.DialogueList.Add(thread_id, objDialogue); } else { System.Diagnostics.Debug.WriteLine("DEBUG : LoadSMSMetaDatas duplication thread_id"); } } } cursor.Close(); } return(dialogueSet); }