2013-06-25 60 views
2

我从BroadcastReceiver(Boot complete receiver)调用GCMRegistrar.register(context, Constants.GCM_SENDER_ID),但它抛出ReceiverCallNotAllowedException,然后我从broadcastreceiver和线程I开始分离线程,我又得到了同样的异常。如何从broadcastReceiver进行GCM注册?

然后,我从广播接收器启动的IntentService和意图的服务我叫

GCMRegistrar.register(context, Constants.GCM_SENDER_ID) 

然后,我就发短信给一个死线程的处理程序,其自带因为Android 2.3的它使用谷歌账户,我认为这做一些异步任务。

现在有没有办法从一个BroadcastReceiver

回答

2

GCMRegistrar已被弃用顺利实现GCMRegistrar.register(背景下,Constants.GCM_SENDER_ID)。更好的选择是使用GoolgeCloudMessaging类。

要使用该注册,您可以拨打

String id = GoogleCloudMessaging.getInstance(context).register(senderId); 
+0

谢谢让我试试 – Naga

+0

此课程需要Google Play服务版本3.1或更高版本。所以我不想使用这个... – Naga

+0

你可以简单地将它添加到你的库中。这是什么问题? – stinepike

0

你可以切换到使用新GoogleCloudMessaging类,如被StinePike建议,但GCMRegistrar.register仍然有效。我想你出于某种原因不能从广播接收器使用它,但是你可以从你的主要活动中调用它(例如)。是否有特殊原因需要从广播接收器中调用它?

+0

是的,我从主要活动调用它,它工作正常,但我想从引导完成broadcastreceiver调用它,在这种情况下它不管用 .. – Naga