我正在我的应用程序中实现 gcm 通知。因为我使用我的代码生成许多具有不同包名称的应用程序,所以我不能使用标准的 mypackage.GCMIntentService 名称。在生成应用程序时,我只在 Manifest 中进行更改并更改我的 R 类的导入。所以我实现了自己的 BroadcastReceiver
public class GCMReceiver extends GCMBroadcastReceiver {
@Override
protected String getGCMIntentServiceClassName(Context context) {
return GCMIntentService.class.getName();
}
}
无论包名称如何,都返回 GCMIntentService 的名称。
这是我的清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="org.rferl.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="org.rferl.permission.C2D_MESSAGE" />
<service
android:name="org.rferl.service.GCMIntentService"
android:enabled="true" />
<receiver
android:name="org.rferl.GCMReceiver"
android:enabled="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<!-- Receives the registration id. -->
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="org.rferl" />
</intent-filter>
</receiver>
一切正常,我可以注册、注销、接收消息。但是当应用程序没有运行时,不会调用 GCMIntentService.onMessage。我的清单中是否缺少某些内容?为什么系统没有启动服务?