본문 바로가기

Mobile Develop/WinMoDev Q&A

SMS interception으로 application 안의 특정 폼 불러오는 방법 질문이요

질문자 : 루시엔 링크 : http://cafe.naver.com/winmodev/1908
<질문내용>

제목하고 같습니다. ㅎ; 

시나리오는 이렇습니다. SMS서버에서 메시지를 뿌려줍니다. 예를 들면 "[20100331] 코드 응급 상황이 발생하였습니다." 라는 문자를 SMS로 받았을 때 코드(숫자부분)를 읽어서 어플내의 폼 2번을 불러오는 것입니다.

 


제가 찾은 정보에 의하면 코드는 다음과 같습니다.

 

 


참조 추가

using Microsoft.WindowsMobile

using Microsoft.WindowsMobile.PocketOutlook

 


using 선언문에 다음을 추가 합니다.

using Microsoft.WindowsMobile.PocketOutlook;

using Microsoft.WindowsMobile.PocketOutlook.MessageInterception; // 문자가로채기를 지원

 


이를 이용해 문자의 내용이나 발신자의 번호를 비교 할수 있고  그 후 다른 동작들도 실행 할수 있습니다.

 


폼의 Load 이벤트

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

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다