안녕하세요 안드로이드 초보 개발자입니다.
이번에 프로젝트에서 처음으로 간단한 안드로이드 어플을 개발을 하는데요.
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 으로 다시 신청해서 확인 메일을 받아도 마찬가지인듯 합니다.
느낌상 간단한 문제인거 같은데 안드로이드는 첫 개발이고 주위에 안드로이드 개발자도 없다보니 참 많이 헤메네요;;
답변해주시면 감사하겠습니다.(__)




현재 소스만 보고 의심되는 부분은
첫째 리스버 네임에 . 을 넣으시던가 풀패스로 넣으시고 테스트 Go~!
두번째 설마 그럴일은 없겠지만 리시버가 어플리케이션 밖에 선언되있을때.
일꺼 같네요..