Androidのプッシュ通知、GCMを登録しちゃう、GCMRegistrationTask.doInBackground
ですが、セキュリティの厳しいスマホだと、これを実行した瞬間にFatal Exceptionで落ちます。
12-11 17:47:54.279: E/AndroidRuntime(11444): FATAL EXCEPTION: AsyncTask #1 12-11 17:47:54.279: E/AndroidRuntime(11444): Process: takuru.user, PID: 11444 12-11 17:47:54.279: E/AndroidRuntime(11444): java.lang.RuntimeException: An error occured while executing doInBackground() 12-11 17:47:54.279: E/AndroidRuntime(11444): at android.os.AsyncTask$3.done(AsyncTask.java:300) 12-11 17:47:54.279: E/AndroidRuntime(11444): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 12-11 17:47:54.279: E/AndroidRuntime(11444): at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 12-11 17:47:54.279: E/AndroidRuntime(11444): at java.util.concurrent.FutureTask.run(FutureTask.java:242) 12-11 17:47:54.279: E/AndroidRuntime(11444): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 12-11 17:47:54.279: E/AndroidRuntime(11444): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 12-11 17:47:54.279: E/AndroidRuntime(11444): at java.lang.Thread.run(Thread.java:841) 12-11 17:47:54.279: E/AndroidRuntime(11444): Caused by: java.lang.SecurityException: Not allowed to start service Intent { act=com.google.android.c2dm. intent.REGISTER pkg=com.google.android.gms (has extras) } without permission com.google.android.c2dm.permission.RECEIVE 12-11 17:47:54.279: E/AndroidRuntime(11444): at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1562) 12-11 17:47:54.279: E/AndroidRuntime(11444): at android.app.ContextImpl.startService(ContextImpl.java:1539) 12-11 17:47:54.279: E/AndroidRuntime(11444): at android.content.ContextWrapper.startService(ContextWrapper.java:494) 12-11 17:47:54.279: E/AndroidRuntime(11444): at com.google.android.gms.gcm.GoogleCloudMessaging.c(Unknown Source) 12-11 17:47:54.279: E/AndroidRuntime(11444): at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source) 12-11 17:47:54.279: E/AndroidRuntime(11444): at takuru.user.gcm.GCMRegistrationTask.doInBackground(GCMRegistrationTask.java:43) 12-11 17:47:54.279: E/AndroidRuntime(11444): at takuru.user.gcm.GCMRegistrationTask.doInBackground(GCMRegistrationTask.java:1) 12-11 17:47:54.279: E/AndroidRuntime(11444): at android.os.AsyncTask$2.call(AsyncTask.java:288) 12-11 17:47:54.279: E/AndroidRuntime(11444): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 12-11 17:47:54.279: E/AndroidRuntime(11444): ... 3 more
下記に答えがありましたが、
AndroidManifest.xml内のパーミッション設定で、下記のように書かないといけないようです。
<!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
大事なのは、コメントの
This app has permission to register…
ってやつです。
これって、ただのコメントかと思ってましたよね。
実は、大事なものだったみたい…
ちなみに、私はこれ書いてあるのに、なんでブチ落ちるの??
と思ってましたが、なんと、AndroidManifest.xml内に
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
がコメントなしでもう一個書いてあって、そちらを消したら落ちなくなりました!(^▽^)/