Symbian OS 의 메시지 저장 및 상용 작업
1. 메시지 저장 기본 지식
Symbian OS 가 제공 하 는 메시지 전송 구 조 는 Client / server 체 제 를 바탕 으로 서버 는 핸드폰 의 각종 정 보 를 관리 하고 정보 관련 작업 을 하기 전에 Symbian OS 가 어떻게 정 보 를 조직 하고 저장 하 는 지 알 아야 합 니 다.
핸드폰 의 각종 정 보 는 데이터 항목 (Entry) 형식 으로 프로그램 을 조작 할 수 있 습 니 다. 데이터 항목 은 4 가지 유형 이 있 습 니 다. SymbianOS 는 모든 데이터 항목 에 해당 하 는 상수 표지 UID 를 제공 합 니 다. 이런 UID 는 msvuids. h 파일 에 저 장 됩 니 다.
Ø 폴 더 형식 입 니 다. 상수 UID 는 KUidMsvFolderEntry 입 니 다. PC 의 파일 시스템 과 마찬가지 로 폴 더 마다 다른 데이터 항목 을 포함 할 수도 있 고 다른 데이터 항목 의 하위 데이터 항목 일 수도 있 습 니 다.
Ø 메시지 형식 입 니 다. 상수 UID 는 KUidMsvMessageEntry 입 니 다. 이 데이터 항목 은 메시지 임 을 표시 합 니 다.
Ø 첨부 파일 형식 입 니 다. 상수 UID 는 KUidMsvAttachment Entry 입 니 다. 이 데이터 항목 은 특정한 정보의 첨부 파일 임 을 표시 합 니 다.
Ø 서비스 유형 에 대응 하 는 상수 UID 는 KUidMsvServiceEntry 이 고 서비스 데이터 항목 은 특정한 메시지 서비스의 설정 정 보 를 포함 하 며 일반적인 상황 에서 이 서 비 스 를 통 해 보 내 는 메시지 데이터 항목 도 가지 고 있다.
위 에서 언급 한 네 가지 유형의 UID 를 제외 하고 자주 사용 되 는 UID 는 KUidMsvRootEntry (msvids. h) 입 니 다. 루트 데이터 항목 은 수신 함 (KMsvGlobalInBox Index EntryId), 보 낸 편지함 (KMsvGlobalOutBox Index EntryId), 초고 함 (KMsvDraft EntryId), 보 낸 항목 (KMsvSent EntryId) 등 4 개의 표준 폴 더 데이터 항목 을 포함 합 니 다.또한 루트 데이터 항목 아래 에는 각종 메시지 서비스 가 있 는 서비스 항목 도 포함 되 어 있 습 니 다. Symbian OS 에 저 장 된 메 시 지 는 다음 그림 과 같 습 니 다.
Symbian OS 의 메시지 서버 는 다양한 유형의 데이터 항목 을 저장 하 는 것 을 책임 집 니 다. 여기 에는 두 가지 기본 개념 이 있 습 니 다. 메시지 저장 과 메시지 색인 입 니 다.메시지 저장 소 는 데이터 항목 의 데 이 터 를 저장 합 니 다. 저 장 된 데이터 형식 은 메시지 서비스 에 달 려 있 습 니 다. 서비스 데이터 항목 은 메시지 저장 소 를 사용 하여 서비스 설정 정 보 를 저장 합 니 다. 폴 더 데이터 항목 은 메시지 저장 소 를 사용 하지 않 습 니 다. Symbian 은 CMsvStore 류 를 제공 하여 데이터 항목 에 접근 하 는 메시지 저장 소 를 제공 합 니 다.메모리 와 빠 른 검색 메 시 지 를 절약 하기 위해 메시지 서버 는 데이터 항목 의 개요 정보 (제목, 날짜, 유형, ID 등) 를 메시지 색인 에 기록 하고 메시지 서버 가 시 작 될 때 메시지 서버 가 닫 힐 때 까지 RAM 에 색인 을 불 러 옵 니 다. Symbian 은 Tmsventry 류 가 데이터 항목 을 표시 하 는 색인 을 제공 합 니 다.
작업 메시지 에 자주 사용 되 는 클래스 와 데이터 형식:
CMsvSession
CMsvSession 은 클 라 이언 트 와 메시지 서버 의 세 션 을 표시 합 니 다. 다음 에 언급 할 CMsvEntry 컨 텍스트 대상 을 가 져 옵 니 다.
TMsvId
이것 은 TInt 32 의 type: def 일 뿐 입 니 다. 메시지 서버 는 모든 데이터 항목 에 하나의 수 치 를 표시 로 합 니 다. 위 에서 언급 한 몇 개의 고정된 표 지 를 제외 하고 다른 표 지 는 모두 동적 으로 분 배 됩 니 다.어떤 메 시 지 를 조작 하려 면 ID 를 먼저 받 아야 합 니 다. Symbian 에 서 는 메시지 와 관련 된 대부분의 함수 가 Tmsvid 를 사용 합 니 다.
TMsvEntry
위 에서 언급 한 바 와 같이 데이터 항목 을 나타 내 는 색인 은 메시지 의 개요 정보 만 포함 하고 주로 Id () 구성원 함수 로 데이터 항목 의 표지 ID 와 공유 데이터 구성원 iDetails, iDescription 과 iDate 를 얻 을 수 있 습 니 다. 앞의 두 구성원 은 색인 의 개요 정 보 를 얻 고 설정 할 수 있 습 니 다. iDate 구성원 은 데이터 항목 의 날짜 와 시간 을 얻 고 설정 할 수 있 습 니 다.
CMsvEntry 와 CMsvServerEntry
CMsvEntry 와 CMsvServerEntry 는 데이터 항목 의 컨 텍스트 (Context) 로 이해 할 수 있 습 니 다. 이 두 가지 유형 은 매우 유사 합 니 다. 다만 CMsvEntry 는 클 라 이언 트 에 사용 되 고 CMsvServerEntry 는 메 시 지 를 실현 하 는 서버 측 에 사용 되 며 데이터 항목 을 조작 하 는 각종 인 터 페 이 스 를 제공 합 니 다. 지 정 된 ID 에 따라 데이터 항목 을 찾 고 메시지 저장 과 메시지 색인 을 얻 을 수 있 습 니 다.
CMsvStore
위 에서 언급 한 바 와 같이 데이터 항목 의 저장 을 표시 합 니 다. CMsvEntry (CMsvServerEntry) 의 EditStoreL (), ReadStoreL () 함 수 를 통 해 편집 가능 한 저장 소 를 얻 거나 읽 기 전용 저장 소 를 얻 을 수 있 습 니 다.
CMsvEntrySelection
CMsvEntry Selection 은 Tmsvid 를 저장 할 수 있 는 배열 로 CMsvEntry (CMsvServerEntry) 를 사용 하 는 많은 작업 에서 매개 변수 나 대상 으로 되 돌아 갑 니 다.
2. 데이터 항목 상용 조작
다음 메시지 작업 은 CMsvEntry 나 CMsvServerEntry 의 포인터 대상 을 사 용 했 습 니 다. 이 두 가지 기능 은 기본적으로 같 지만 일부 함수 명 은 다 를 수 있 습 니 다. SDK 를 찾 아 보 세 요.
1. 현재 데이터 항목 의 인덱스 와 ID 가 져 오기
TMsvEntry oldEntry = iServerEntry->Entry();
TMsvId oldContext = oldEntry.Id(); //CMsvEntry 를 사용 하면 EntryId () 를 직접 사용 할 수 있 습 니 다.
2. 지정 한 데이터 항목 으로 위치 지정
현재 데이터 항목 을 바 꾸 기 전에 현재 데이터 항목 의 색인 ID 를 저장 하고 데이터 항목 을 바 꾸 고 관련 작업 을 마 친 후에 원래 의 데이터 항목 으로 바 꾸 는 것 이 다른 함수 에 영향 을 주지 않도록 하 는 좋 은 습관 입 니 다.
TMsvId oldContext = iServerEntry->Entry().Id();
/ / SetEntry () 를 사용 하여 현재 데이터 항목 을 루트 로 변경 합 니 다.
iServerEntry->SetEntry(KMsvRootIndexEntryId);
//구체 적 인 조작 후 원래 데이터 항목 으로 바 꿉 니 다.
iServerEntry->SetEntry(oldContext);
3. 데이터 항목 찾기
다음 세 개의 CMsvEntry 멤버 함 수 는 현재 데이터 항목 에서 찾 을 수 있 는 기능 을 수행 할 수 있 습 니 다.
CMsvEntrySelection* ChildrenWithMtmL(TUid aMtm) const;
메시지 서비스 (MTM) 에 따라 메시지 색인 대상 (Tmsventry) 의 구성원 iMtm 가 aMtm 와 같은 데이터 항목 ID 를 찾 습 니 다.
CMsvEntrySelection* ChildrenWithServiceL(TMsvId aId) const;
메시지 서비스 ID 를 찾 아서 메시지 인덱스 대상 (Tmsventry) 의 구성원 인 iServiceId 가 aId 와 같은 데이터 항목 ID 를 찾 습 니 다.
CMsvEntrySelection* ChildrenWithTypeL(TUid aEntryType) const;
데이터 항목 형식 에 따라 찾 습 니 다. 메시지 색인 대각선 (Tmsventry) 의 구성원 i Type 은 aEntry Type 의 데이터 항목 ID 와 같 습 니 다.
CMsvServerEntry 와 이에 대응 하 는 세 가지 함 수 는 GetChildren With Mtm (), GetChildren With Service (), GetChildren With Type () 입 니 다. 주의 하 는 것 은 CMsvEntry 의 세 가지 함수 가 모두 CMsvEntry Selection 대상 의 지침 을 되 돌려 주 는 것 입 니 다. 사용 한 후에 우 리 는 방출 을 책임 져 야 합 니 다. CMsvServerEntry 의 세 가지 함 수 를 사용 하려 면 CMsvEntry Selection 대상 을 미리 구성 해 야 합 니 다.다 쓴 후에 도 석방 이 필요 하 다.
POP 3 메 일 개수 코드 찾기
iMsvEntry->SetEntryL( KUidMsgTypePop3 );
CMsvEntrySelection* sel = NULL;
sel = entry->ChildrenWithMtmL( KPkiSmtpTechnologyTypeUid );
TInt cnt = sel->Count(); //집합 중인 데이터 항목 의 개 수 를 가 져 옵 니 다.
delete sel;
4. 메시지 인덱스 변경
TMsvEntry entry = iMsvEntry->Entry();
entry.iDetails.Set( _L( “New details” ) );
iMsvEntry->ChangeL( entry ); //변 경 된 데이터 항목 색인 을 메시지 색인 에 다시 쓰 십시오.
5. 데이터 항목 의 읽 기와 쓰기
데이터 항목 의 읽 기와 쓰 기 를 하기 전에 EditStoreL () 을 사용 해 야 합 니 다. ReadStoreL () 함 수 는 CMsvStore 가 제공 하 는 인 터 페 이 스 를 통 해 저 장 됩 니 다.
void CMessageView::ViewMessageL(TMsvId aId)
{
// Construct the CMsvEntry
CMsvEntry* entry = iSession->GetEntryL(aId);
CleanupStack::PushL(entry);
// Get the messaging store
CMsvStore* store = entry->ReadStoreL();
CleanupStack::PushL(store);
// Construct the CRichText and restore the body text
CParaFormatLayer* paraLayer = CParaFormatLayer::NewL();
CleanupStack::PushL(paraLayer);
CCharFormatLayer* charLayer = CCharFormatLayer::NewL();
CleanupStack::PushL(charLayer);
CRichText* body = CRichText::NewL(paraLayer, charLayer);
CleanupStack::PushL(body);
store->RestoreBodyTextL(*body);
// Extract body text from CRichText
TInt len = body->DocumentLength(); //get length
HBufC *buf = HBufC::NewL( len );
TPtr ptrBuf = buf->Des();
body->Extract( ptrBuf, 0, len ); //get data
//메시지 의 저장 형식 이 다 르 기 때문에 ptrBuf 에 대한 디 코딩 이 필요 할 수 있 습 니 다.
//디 스 플레이
delete buf;
buf = NULL;
CleanupStack::PopAndDestroy(5, entry);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
집 서버 설계 (하드웨어 편)자신의 Redmine이나 ownCloud를 운용하기 위해 사쿠라 VPS, DigitalOcean, OpenShift 등을 놀랐습니다만, 침착 해 왔으므로 현상을 정리하고 싶습니다. 먼저 하드웨어 구성을 정리합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.