2011-08-11 89 views
1

我的应用程序从C2DM服务器收到一个意图来注册推送通知(工作正常),并且在通过广播接收器接收到该消息时,它启动一个IntentService(处理从C2DM接收到的意图)。然而调用启动IntentService与此失败:什么原因导致“无法启动服务意图”?

Unable to start service Intent { act=com.google.android.c2dm.intent.REGISTRATION 
cat=[com.company.myapp] cmp=com.company.myapp/.receiver.C2DMReceiver 
(has extras) }: not found 

你能帮我明白这是什么错误意味着? C2DMReceiver类是IntentService的子类,它当然存在。我正在使用Intent.setClass()并直接指定类。编译器接受它,所以我不明白为什么异常说“未找到”。什么没有找到?

如果任何人都可以提供关于调试的任何提示,我真的很感激它。

<receiver android:name="com.company.myapp.receiver.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
     <!-- Receive the actual message --> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="com.company.myapp" /> 
     </intent-filter> 
     <!-- Receive the registration id --> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <category android:name="com.company.myapp" /> 
     </intent-filter> 
    </receiver> 

回答

1

原因是清单中缺少标签。不幸的是,它看起来像我不小心从清单中删除它,可能同时进行另一次编辑。通过清单条目,IntentService可以正常启动。

+0

哪个标签丢失?我得到同样的错误,也许我犯了同样的错误。 – Janusz

+0

你可以给简要的信息。我也遇到了同样的错误。 –

+0

是有问题的标签,其中.GCMIntentService是扩展GCMBaseIntentService的类的名称。标签必须位于您的标签内。 – Dororo

0

有你在AndroidManifest.xml中注册用行动com.google.android.c2dm.intent.REGISTRATION意图过滤器?

+0

是的。广播接收器工作正常,它接收来自C2DM的消息,但之后失败的是启动IntentService。 –

+0

你可以添加你的AndroidManifest到这个问题吗?至少应用程序块,以显示您如何使用意图过滤器。还有一个关于如何调度意图的代码示例。 –

+0

我已经添加了清单部分 –

0

您必须安装有安装了Android 2.2+和Market应用程序的设备(意味着它是官方的Google设备)。

+0

我是。这是一个Nexus One,他们没有得到比官方更多的:)但是,正如我所说的问题是没有从C2DM服务器收到推送通知消息,这工作正常,问题是当广播接收机试图启动IntentService处理该消息。 –

相关问题