안녕하세요 안드로이드 초보 개발자입니다.


이번에 프로젝트에서 처음으로 간단한 안드로이드 어플을 개발을 하는데요.


c2dm 을 이용하면서 잘 안되서 질문올립니다.


우선 등록 id를 신청하는 소스에서 


startService(registrationIntent);


를 실행했을때 로그에 


WARN/ActivityManager(71): Unable to start service Intent { act=com.google.android.c2dm.intent.REGISTER (has extras) }: not found


라는 메세지가 뜨고 리시버는 작동을 안합니다.


실제 개통폰인 테스트 기기에서도 onReceive 메소드가 작동안하는것은 마찬가지구요


오류 메시지도 없습니다.


테스트 관련 소스는 인터넷에서 검색한 간단한 메세지 전송 예제이구요


테스트 액티비티

 

//C2DM 등록ID 발급

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");

registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // 어플리케이션ID

registrationIntent.putExtra("sender", "xxxxxxx@xxxx.com"); //개발자ID


startService(registrationIntent); //서비스 시작(등록ID발급받기)


리시버 액티비티


    public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {

     handleRegistration(context, intent);

     } else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {

     c2dm_msg = intent.getExtras().getString("msg");

     System.out.println("c2dm_msg======>"+c2dm_msg);

    Toast toast = Toast.makeText(context, "메시지 도착!\n"+c2dm_msg, Toast.LENGTH_SHORT );

  toast.setGravity( Gravity.TOP | Gravity.CENTER, 0, 150 );

  toast.show();

     }

    }


추가한 AndroidManifest.xml


<receiver android:name="C2dmReceiver" android:permission="com.google.android.c2dm.permission.SEND">

<intent-filter>

                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>

                <category android:name="com.xxx.app.c2dm" />

         </intent-filter>

        <intent-filter>

                <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>

                <category android:name="com.xxx.app.c2dm" />

        </intent-filter>

</receiver>


<permission android:name="com.xxx.app.c2dm.permission.C2D_MESSAGE" android:protectionLevel="signature"/>

    

<uses-permission android:name="com.xxx.app.c2dm.permission.C2D_MESSAGE"/>

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>

    

<uses-permission android:name="android.permission.INTERNET" />



두개의 테스트 액티비티는 com.xxx.app.c2dm 안의 클래스 이고


c2dm 신청시 적은 패키지 네임은 com.xxx.app.c2dm


AndroidManifest.xml에 명시한 패키지 명은 package="com.xxx"


메인 클래스는 com.xxx.app.main 에 위치해 있습니다.


신청시 패키지 이름을 잘못했나 싶어서 com.xxx 으로 다시 신청해서 확인 메일을 받아도 마찬가지인듯 합니다.


느낌상 간단한 문제인거 같은데 안드로이드는 첫 개발이고 주위에 안드로이드 개발자도 없다보니 참 많이 헤메네요;;


답변해주시면 감사하겠습니다.(__)