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 で生成された。
これにハマる人、けっこう多いんじゃないかなー。