今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

GCMの実装中のIllegalAccessExceptionに悩まされた件

AndroidでGCMを受け取るためのサービスGCMIntentServiceを実装して試しに動かした時に、IllegalAccessExceptionが発生してた。

java.lang.IllegalAccessException: access to constructor not allowed

その少し上を見ると、

Could not find class android.app.Notification$Builder

なんて出てたから、それが原因だと思っていろいろと試行錯誤するけどなかなか解決できなかった。

しばらく試行錯誤した後に、もう一度メッセージを確認したら「access to constructor not allowed」って。これって、コンストラクタにアクセスできないってことだからと思ってGCMIntentServiceのコードを確認した。

	protected GCMIntentService() {
		super(GCM_SENDER_ID);
	}

コンストラクタが protected になっとるやん!
public に修正したらあっさり動くようになった。
考えてみると、このコンストラクタって Eclipse のクイックフィックスで生成したんだってことを思い出して、コンストラクタを削除して、もう一度クイックフィックスで生成してみたら、やっぱり protected で生成された。
これにハマる人、けっこう多いんじゃないかなー。