Windows Mobile2009.03.02 11:57

스마트폰에서 SMS(Short Messaging Service, 문자)가 오면
문자를 읽고 쓰는 프로그램이 구동 되면서 문자를 읽어오고, 보내는 작업을 한다.

이때,
확인하지 않은 문자의 갯수를 윈도 모바일 레지스트리에 기입을 하게되는데,

읽지 않은 문자 메시지의 수를 기록하는 경로가 조금씩 다르다.

우리나라가 표준에 벗겨난 방식을 사용하는 것 같기도 하고,
또한 국내 에서도 기기마다 상이하다.

윈도 모바일의 레지스트리 중에 확인하지 않은 문자의 갯수를 기록하는 레지스트리는 아래 두개 이다.

1. HKCU\System\State\Messages\sms\unread\Count
2. HKLM\System\State\Messages\SMS\Unread\Count

문제점은
단말기는 문자가 오면, 1번 키에 확인하지 않은 문자의 갯수를 기록하는데,
설치된 프로그램은 2번 키의 카운트를 참조하기 때문에
화면에 보여지는 확인하지 않은 문자의 갯수가 실제 시스템의 갯수와 맞지 않는 것.
(또는 서로 반대의 경우)

인터넷에 돌아다니는 해결방법은.
1번의 키값을 주기적으로 2번의 키 값에 복사해 써 넣는 방법.
(대부분의 mort script를 보면 이렇다.)

하지만, 주기적으로 레지스트리를 읽고, 쓰는 메카니즘은 CPU를 계속 사용한다는 말이고,
배터리 소비를 주기적으로 꾸준히 할 수 밖에 없는 구조라는 문제가 있다.

시스템 Notifications 을 이용하는 방법은
주기적으로 레지스트리의 값을 체크하는 방법과 달리
문자가 오면 시스템에서 내 프로그램에게 문자가 왔다는 이벤트를 날려주고
내 프로그램은 이벤트에 담겨 있는 읽지않은 문자 메시지의 갯수를
위 2군데 레지스트리 값에 써 넣는 방법이다.



Posted by Dr.Kein

댓글을 달아 주세요

Windows Mobile2008.08.01 10:37
1. C# 에서 (.NET Framework)
2. UI를 갖는 어플리케이션을 작성할 때
3. 스레드를 생성해서
4. form 의 control 객체를 접근할 때
만나게되는 에러..

$exception  {"Control.Invoke는 별도 스레드에 만들어진 컨트롤과 상호 작용하는 데 사용해야 합니다."}
        System.Exception {System.NotSupportedException}


폼에 있는 컨트롤 박스를 별도의 스레드 (폼 도 하나의 스레드) 에서 접근하려고 하면
서로 다른 스레드가 하나의 컨트롤 객체에 접근하는 것을 방지하기 위해서 고안된 방법이라고 이해된다.
어디에서나 있는 멀티 스레드 환경에서 자원보호를 위한 방지책 인것이다.

샘플 코드...
아래 코드는 myDelegate라고 하는 위임을 선언하고,  progressbar 컨트롤을 업데이트 하는 스레드를 만든다.
myDelegate와 동일한 서명을 가지고 updateProgress 메서드를 선언하고, Invoke 메서드에게 updateProgress와 개체 배열을 파라미터로 전달한다.
private void updateProgress(int theValue, int theMax)
{
    if(theMax != 0)
       proStatus.Maximum = theMax;
    proStatus.Value = theMax;
}

private delegate void myDelegate(int theValue, int theMax);

private void myThread()
{
   for (int i=0 ; i < 10 ; i++)
  {
      this.Invoke(new myDelegate(updateProgress), new object[] {i*10,100});
      Thread.Sleep(500);
  }
}

private void cmdCreateThread_Click(object sender, System.EventArgs e)
{
   new Thread(new ThreadStart(myThread)).Start();
}


Eclipse를 주로 써 오다가, visual studio 를 사용하는 입장에서 코딩 하기 꽤나 귀찮다.

한 예로, 예외처리를 해야하는 코드에서 eclipse는 코딩 단계에서 try~catch 하라고 나오는데 반해
VS 는 빌드를 해야만, 또는 디버깅 중에 try~catch 하라고 나타난다.

pocket pc 를 디버깅 하려면 빌드, 배포 단계가 시간이 너무 오래 걸리는데,
기다렸다가 코드 몇 줄 넘어가다 exception 이라고 나타나니,,,,
짜증이 나는거지... 쳇.
Posted by Dr.Kein

댓글을 달아 주세요

  1. 그래서 Native Language가 최고라니까요 'ㅂ'

    2008.08.01 14:10 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • ㅎㅎ 그런가요^^;; 코딩을 전문으로 하질 않아서 native 도 어려워요 ㅎㅎ
      ppc용 프로그램 개발하는 일 하시나 본데 좋은 프로그램 많이 만들어 주세요~ ^^*

      2008.08.01 23:36 신고 [ ADDR : EDIT/ DEL ]
  2. 좋은 내용 담아 가도록하겠습니다. ^^

    2010.01.20 18:00 신고 [ ADDR : EDIT/ DEL : REPLY ]

Windows Mobile2008.07.23 15:44
아래 샘플 코드는 C# (.NET compact framework) 코드로
pocket pc 2003 의 레지스트리에서 적외선 포트를 찾아오는 방법이다.
win ce, window mobile 에서도 공통으로 사용할 수 있을것 같다.

레지스트리에서 적외선 포트 값을 얻는 방법은 몇 가지가 있지만,
대부분 아래의 레지스트리 키값을 얻어오면 된다.

그리고, 레지스트리의 키값 에 +1 을 해 주어야 되는것 같다.
즉, COM3 번은 레지스트리에 port index 가 2로 되어 있는것 같다.

(아무리 생각해도 레지스트리의 이곳에 적혀있는 포트 번호는 NativeIR 번호 인것 같다.)

private string FindPortIndex()
        {
            string rtn = null;
            RegistryKey regKey = Registry.LocalMachine.OpenSubKey("Drivers\\BuiltIn\\IrDA");
            if (regKey != null)
            {
                object regData = regKey.GetValue("Index");
                if (!regData.ToString().Equals("0"))
                {
                    regKey.Close();
                    rtn = "COM" + regData.ToString();
                }
            }
            else
            {
                rtn = "Can't find from registry.";
            }
            return rtn;
        }

또 다른 곳에 있는 적외선 포트 번호 경로는...
HKEY_LOCAL_MACHINE 의 Drivers/BuiltIn/IrCOMM 의 Index
아마도.. 이것이 적외선 포트의 번호인 것 같다.

SerialPort 클래스로 COM2 번을 open 하려고 하면 열수가 없었다.
근데, COM3 번은 열렸다..


문제는.. open 한 다음에 적외선 코드를 쏘고, 받고 해야하는데.. 그게 안된다.
Posted by Dr.Kein

댓글을 달아 주세요

Windows Mobile2008.07.19 22:02
VS 2005에서 개발의 첫걸음을 설명한 자료가 있어서 퍼왔다.
MyMITs.net 싸이트의 person 님이 올린 자료.
출처 : http://mymits.korea.com/zboard/zboard.php?id=dev_comm&page=8&no=20


Posted by Dr.Kein

댓글을 달아 주세요

Windows Mobile2008.07.19 21:54
pocket pc, windows mobile, smartphone, palm 등등
같은것 같으면서도 서로 다른 용어들 때문에 처음 시작 단계부터 상당히 헷갈린다.

이제야 쬐끔 갈피를 잡아가고 있는 중 ㅋ

개발에 관련된 내용을 정리해 보자
Posted by Dr.Kein

댓글을 달아 주세요