질문자 : 루시엔 | 링크 : http://cafe.naver.com/winmodev/1908 |
<질문내용> 제목하고 같습니다. ㅎ; 시나리오는 이렇습니다. SMS서버에서 메시지를 뿌려줍니다. 예를 들면 "[20100331] 코드 응급 상황이 발생하였습니다." 라는 문자를 SMS로 받았을 때 코드(숫자부분)를 읽어서 어플내의 폼 2번을 불러오는 것입니다.
using Microsoft.WindowsMobile using Microsoft.WindowsMobile.PocketOutlook
using Microsoft.WindowsMobile.PocketOutlook; using Microsoft.WindowsMobile.PocketOutlook.MessageInterception; // 문자가로채기를 지원
private MessageInterceptor interceptor; private void Form1_Load(object sender, EventArgs e) { interceptor = new MessageInterceptor(); interceptor.InterceptionAction = InterceptionAction.Notify; interceptor.MessageReceived += new MessageInterceptorEventHandler(Received); }
private void Received(object sender, MessageInterceptorEventArgs e) { SmsMessage sms = (SmsMessage)e.Message; textBox1.Text = sms.From.Address; textBox2.Text = sms.Body; }
위의 코드를 어디에 삽입을 해야 하는지와 어느 부분을 수정해야 어플의 특정 폼을 로드할 수 있을까요? 전혀 감이 안갑히네요 | |
<답변내용> 안녕하세요 루나네스 입니다
메신저로 답을 어느정도 드렸으나 정리된 부분을 남겨 드립니다
소스코드는 일반 폼 하나 생성 후 적용하여 테스트 가능합니다 실제로 사용하기 위해서는 consol 어플로 개발하여 (프로세스 동작 과정이 화면에 보이지 않는) 프로세스 상에서 항상 감시하도록 설계하면 될 것 같습니다
하지만, 문제는 다른 곳에 있습니다
1. 국내 통신사 전용 SMS를 사용할 경우에는 SMS Intercept가 불가능 합니다 - 예전에도 나왔던 내용이지만, 오늘 확실하게 확인하였습니다 Managed코드에서 지원하는 Microsoft.WindowsMobile.PocketOutlook.MessageInterception의 MessageInterceptor 는 국내 통신사 전용 SMS를 사용할 경우에는 동작하지 않습니다 이유 : 윈폰의 기본 SMS는 포켓 아웃룩을 이용해서 관리합니다. 국내 통신사 전용 SMS는 이것을 무시하고 (사용하지 못하도록 막아두고) 자체적인 SMS 저장 DB를 활용하기 때문에 포켓 아웃룩을 사용하지 못해서 메시지를 가로챌 수 없습니다
2. 만약 MS-SMS를 사용할 경우에는 어떠한가? - 당연히 Intercept가 가능합니다 (MS-SMS를 사용하는 옴2와 에뮬레이터 에서 동작 확인 했습니다)
3. 그렇다면 해결 방법은 없는 것인가? - Native 코드를 이용해서 시스템 레벨에서 발생되는 SMS 수신 인터럽을 감지하는 방법을 이용하거나 수신된 SMS가 저장된 통신사 전용 DB파일을 검사하여 해당 조건을 만족하는 SMS를 확인해야 합니다 그렇지 않다면 모든 단말기에 MS-SMS를 사용하도록 변경해야 합니다
가급적이면 순정상태를 고려해서 개발해야 하기 때문에 좀 더 많은 자료가 필요할 것 같습니다 일단 저도 확보한 자료 분석 이후 추가도 답변 드리겠습니다 | |
작성일 : 2010.03.31 23:54 |
Mobile Develop/WinMoDev Q&A