Android Mms 의:수신 정보 프로 세 스(그림 설명)

정보의 수신 작업 은 밑바닥 에서 이 루어 집 니 다.새로운 정보 가 있 을 때 밑바닥 에서 수신 이 완료 되면 Intent 방식 으로 상부 에 알 립 니 다.정보의 관련 내용 도 Intent 에 포함 되 어 있 습 니 다.Android 가 지원 하 는 정보 Intent 는 모두 android.provider.Telephony.Intents 에 정 의 됩 니 다.문자 수신

문자 수신,상부 애플 리 케 이 션 에 있어 서 는 방송 사건 을 처리 하 는 SMSRECEIVED_ACTION,Frameworks 에서 상부 에 새로운 SMS 를 받 았 다 고 알 렸 습 니 다.Mms 에 서 는 Privileged Sms Receiver 가 처리 합 니 다.SMS 를 받 습 니 다.RECEIVED_ACTION(android.provider.Telephony.Intents.SMS_RECEIVED_ACTION=”android.provider.Telephony.SMS_"RECEIVED")이후 SmReceiverService 를 시작 하여 구체 적 인 처 리 를 할 것 입 니 다.
SmsReceiverService 는 먼저 문자 의 종 류 를 검사 하 며,Class 0 문자 라면 GUI 에 직접 표시 되 며,별도의 처리 없 이 데이터베이스 에 저장 되 거나 Notification Bar 에서 Notification 을 하지 않 는 다.
다른 문자 에 대해 서 는 기 존 메 시 지 를 교체 하거나 새로운 메시지 로 삽입 합 니 다.데이터베이스 에 있 는 문자 에서 새로 온 문자 의 원본 주소 와 프로 토 콜 표지 와 같다 면 새로 들 어 온 문자 로 교체 하고 그렇지 않 으 면 새 문자 로 삽입 하 는 것 이 원칙 이다.
구체 적 인 교체 절차:먼저 새로 들 어 온 문자 로 ContentValues 를 만 든 다음 에 문자 의 주소 와 협의 표 지 를 조건 으로 데이터 베이스 에 조회 하고 찾 으 면 교체 하 며 그렇지 않 으 면 저장 합 니 다.
저 장 된 프로 세 스 도 먼저 CotentValues 를 생 성 한 다음 에 문자 메시지 의 Thread Id 와 주 소 를 꺼 냅 니 다.주 소 는 연락처 데이터베이스 와 동기 화하 여 식별 할 수 있 는 주소 가 되도록 해 야 합 니 다.Thread Id 가 합 법 적 이지 않 으 면 동기 화 된 주소 로 Thread Id 를 다시 만 들 고 5 번 시도 합 니 다.그리고 새로 고 친 Thread Id 를 ContentValues 에 넣 고 ContentValues 를 데이터베이스 에 삽입 합 니 다.SIM 카드 에 정 보 를 저장 하 는 것 으로 설정 되면 SmsManager 를 호출 하여 SIM 카드 에 정 보 를 복사 해 야 합 니 다.문자 의 크기 를 계산 하여 데이터베이스 에 업데이트 합 니 다.만 료 된 문자 메시지 와 수량 제한 을 초과 한 문자 메 시 지 를 삭제 하고 삽입 후 받 은 문자 Uri 를 되 돌려 줍 니 다.마지막 으로 교체 되 거나 삽 입 된 문자 에 대해 서 는 Uri 로 StatusBar 에 가서 Notification 을 한다.GUI 는 데이터베이스 에 문자 가 저장 되 어 있 기 때문에 목록 을 새로 고 칠 때 도 새 문 자 를 받 을 수 있다.
컬러 편지 의 수신 과정 은 문자 메시지 와 약간 다르다.주로 응용 프로그램 이 컬러 편지 서비스 센터(MMSC Multimedia Messaging Service Center)에서 컬러 편지 정 보 를 다운로드 하 는 것 을 책임 진다.대체적인 절 차 는 Frameworks 가 먼저 메 시 지 를 보 내 어 응용 프로그램 에 컬러 편지 가 있다 는 것 을 알 리 는 것 이다.문자 에는 만 료 날짜,발송 자의 핸드폰 번호,컬러 편지 의 URL 등 이 포함 되 어 있 고 응용 프로그램 은 자체 적 으로 HTTP 를 통 해 URL 이 가리 키 는 컬러 편지 내용 을 되 찾 는 것 이다.구체 적 인 절 차 는:
Telephony Frameworks 에서 먼저 Intent:android.provider.Telephony.Intents.WAP 를 보 냅 니 다.PUSH_RECEIVED_ACTION=”android.provider.Telephony.WAP_PUSH_"RECEIVED"는 상부 응용 프로그램 에 컬러 편지 가 왔 다 고 알 렸 다.이 Intent 에는'data'byte 배열(byte[]data=intent.getByteArray Extra('data')을 통 해 얻 을 수 있 습 니 다)이 Byte 배열 은 이 컬러 편지 에 대한 정보 에 대한 설명 입 니 다.NotificationInd 입 니 다.그 안에 컬러 편지 의 일부 정보 가 들 어 있 습 니 다.예 를 들 어 발송 자의 핸드폰 번호,컬러 편지 의 ContentLocation(URL)입 니 다.다음은 응용 프로그램 이 다음 처 리 를 어떻게 할 것 인 가 를 결정 한다.
Mms 에 서 는 transaction.PushReceiver.자바 가 WAP 를 받 습 니 다.PUSH_RECEIVED_ACTION,컬러 메 시 지 를 받 고 Intent 에 게 미리 처 리 를 하고 data 필드 를 꺼 내 Pdu 의 도구 로 GenericPdu 로 해석 한 다음 NotificationInd 로 전환 하여 데이터 베 이 스 를 기록 한 다음 TransactionService 를 시작 하여 진일보 한 NOTIFICATIONTRANSACTION 처리 와 함께 이 NotificationInd 의 Uri 도 전달 합 니 다.
TransactionService 가 불 러 옵 니 다.onStartCommand 에서 PushReceiver 에서 들 려 오 는 Intent 를 자신의 Message Queue 에 넣 고 Handler.handle Message()에서 TRANSACTION 을 처리 합 니 다.요청 시 NOTIFICATION 처리TRANSACTION。먼저 기본 컬러 편지 와 관련 된 설정 정 보 를 불 러 옵 니 다.주로 MMSC,Proxy,Port 입 니 다.이것들 은 모두 운영 자 와 관련 된 정보 이 므 로 APN 설정 을 통 해 변경 할 수 있 습 니 다.TransactionService 는 PushReciver 에서 보 내 온 NotificationInd 의 Uri 와 불 러 온 설정 정보 TransactionSettings 로 NotificationTransaction 대상 을 구축 합 니 다.이후 TransactionService 는 두 개의 대기 열 을 검사 하거나 Pending 대기 열 에 가입 하거나 직접 처리(처리 대기 열 에 가입)하 며 처리 도 NotificationTransaction.process()를 직접 호출 합 니 다.
NotificationTransaction 의 process()방법 은 부모 클래스 Transaction 을 계승 하 는 방법 입 니 다.새로운 스 레 드 를 간단하게 열 고 돌아 오 면 Service 가 다른 Transaction Request 를 처리 할 수 있 습 니 다.
스 레 드 에서 먼저 DownloadManager 와 Telephony Manager 에서 설정 정 보 를 불 러 옵 니 다.컬러 메 시 지 를 자동 으로 가 져 올 지 여부(auto retrieve),Telephony 를 데이터 지연 으로 설정 할 지 여부(DATASUSPEND),그리고 다른 조 치 를 취해 NotificationInd 에서 컬러 편지 의 만 료 날 짜 를 꺼낸다.데 이 터 를 가 져 오지 않 는 것 으로 설정 되 어 있 으 면(더 정확히 말 하면 지금 데 이 터 를 가 져 오지 않 는 것)DownloadManager 의 상 태 를 STATE 로 표시 합 니 다.UNSTARTED,MMSC 에 Notify Response Indication 을 보 낸 후 처 리 를 마치 고 함수 가 되 돌아 오 며 컬러 편지 의 알림 처리 절 차 는 여기까지 입 니 다.사용 자 는 UI 를 조작 하여 다른 방법 으로 수 동 으로 컬러 편 지 를 다운로드 할 수 있 습 니 다.이것 은 뒤에서 상세 하 게 토론 할 것 입 니 다.
자동 으로 가 져 오 거나 데이터 전송 이 원활 하 다 고 설정 하면 DownloadManager 상 태 를 START 로 표시 합 니 다.DOWNLOADING 은 컬러 편지 데 이 터 를 다운로드 하기 시작 했다.컬러 편지 의 획득 은 HTTP 에서 컬러 편지 의 ContentLocation(URL)로 데 이 터 를 얻 는 것 이다.먼저 부모 클래스 방법 getPdu()를 호출 하여 컬러 편지 의 URL 을 전송 하고,마지막 으로 HttpUtils 의 httpConnection 방법 으로 HTTP GET 요청 을 보 내 면 MMSC 는 컬러 편지 데 이 터 를 getPdu()의 반환 값 으로 되 돌려 줍 니 다.by te 배열 을 받 았 습 니 다.Pdu 의 도구 로 GenericPdu 로 해석 한 다음 Pdu Persister 로 데이터 베 이 스 를 기록 한 다음 에 컬러 편지 의 크기 를 데이터베이스 에 업데이트 해 야 합 니 다.여기 서 컬러 편지 의 수신 은 완 료 된 것 입 니 다.나머지 는 컬러 편지 의 데 이 터 를 받 았 기 때문에 이전 알림 메시지(NotificationInd)를 삭제 한 다음 관련 상 태 를 업데이트 해 MMSC 에 Notify Response Indication 으로 되 돌려 처리 하 는 것 이다.데이터베이스 가 바 뀌 었 기 때문에 UI 는 ContentChanged 이 벤트 를 받 고 UI 목록 을 새로 고치 면 새로운 정보 가 표 시 됩 니 다.

앞에서 말 한 바 와 같이 컬러 편지 설정 이 자동 으로 가 져 오지 않 는 것 으로 설정 되면 UI 가 새로 고침 되면 컬러 편지 알림:만 료 날짜,컬러 편지 크기 등 을 표시 하고'다운로드'버튼 을 제공 합 니 다.사용 자 는 버튼 을 누 르 면 컬러 편지 내용 을 다운로드 할 수 있 습 니 다.버튼 을 누 르 면 TransactionService 를 시작 하여 컬러 편지 가 알려 주 는 Uri 와 RETRIVE 를 시작 합 니 다.TRANSACTION request 를 Intent 에 포장 하여 TransactionService 에 전달 합 니 다.TransactionService 는 다른 Transaction 을 처리 하 는 것 처럼 자신의 Message Queue 에 넣 고 기본 TransactionSettings 를 불 러 와 RetrieveTransaction 대상 을 구축 한 다음 RetrieveTransaction.process()를 호출 합 니 다.
RetrieveTransaction 도 Transaction 에서 계승 되 었 고 process()도 하나의 스 레 드 를 만 들 고 되 돌 아 왔 습 니 다.스 레 드 에서 우선 Pdu 도 구 를 사용 하여 Uri 에 따라 데이터베이스 에서 컬러 메시지 알림(NotificationInd)을 불 러 오고 NotificationInd 에서 컬러 메시지 의 만 료 날 짜 를 가 져 와 만 료 날 짜 를 검사 합 니 다.컬러 편지 가 만 료 되 었 다 면 MMSC 에 Notify Response Indication 을 보 냅 니 다.DownloadManager 상 태 를 다운로드 시작 으로 표시 한 다음 컬러 편지 가 만 료 되면 Transaction 상 태 를 Failed 로 표시 하고 되 돌아 와 처리 절 차 를 끝 냅 니 다.모든 것 이 정상 이면 getPdu()로 컬러 편지 의 ContentLocation(URL)에서 컬러 편지 내용 을 가 져 옵 니 다.HttpUtils.httpConnection()으로 HTTP 를 통 해 가 져 와 byte 배열 로 돌아 갑 니 다.Pdu 도구 로 byte 배열 을 분석 하여 GenericPdu 를 얻어 새로운 정보 인지,중 복 된 정보 인지 확인 하고,중 복 될 경우 표기 형 이 실패 한 후 되 돌아 와 처 리 를 끝 냅 니 다.새로운 정보 라면 먼저 GenericPdu 를 Pdu Persister 로 데이터베이스 에 기록 하고 정보 크기 와 ContentLocation(URL)를 데이터베이스 에 업데이트 합 니 다.여기 서 컬러 메 시 지 는 모두 가 져 왔 습 니 다.다음은 MMSC 에 확인 메 시 지 를 보 내 처리 상 태 를 성공 적 으로 표시 하고 처 리 를 마 치 는 것 이다.이때 UI 는 데이터베이스 변 화 를 감청 하고 새로 고침 해 야 하 며,새로운 정보 가 사용자 에 게 표 시 될 것 입 니 다.

요약:정보 전송 과 유사 하 게 데이터 베 이 스 는 정 보 를 받 는 과정 에서 중요 한 역할 을 한다.정 보 를 받 은 후에 분석 한 다음 에 데이터 베 이 스 를 쓴다.보 내 는 것 과 달리 받 은 정 보 는 그렇게 많은 상태 가 아니다.데이터 베 이 스 를 기록 하면 정보 수신 이 성공 했다 는 것 을 의미한다.UI 도 데이터 베 이 스 를 감청 하 는 변화 이다.변화 가 생기 면 바로 디 스 플레이 정 보 를 새로 고침 합 니 다.

좋은 웹페이지 즐겨찾기