Not allowed to start service Intent { act=com.google.android.c2dm.intent.REGISTERのエラー

Android

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

下記に答えがありましたが、

http://stackoverflow.com/questions/22117317/securityexception-not-allowed-to-start-service-intent-act-com-google-android

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" />

がコメントなしでもう一個書いてあって、そちらを消したら落ちなくなりました!(^▽^)/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です