我创建了一个使用Android Cloud to Device Messaging的应用程序,因为我使用此应用程序从正确的图标启动它可以正常工作。我发现的问题是在设备启动后。启动后,接收器正确启动并正确启动我想要使用的服务,检查它是否正在运行以执行某些任务并最终启动另一项服务。
为实现这一目标,我做到了这一点:
清单上的:
<receiver android:name=".C2DMReceiver" 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.myapp.app" />
</intent-filter>
<!-- Receive the registration id -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.myapp.app" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="com.myapp.app" />
</intent-filter>
</receiver>
在我的接收器中:
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent NewIntent = new Intent(context, MyService.class);
context.startService(NewIntent);
Log.i("C2DMReceiver", "MyService started");
}
然后onMessage收到接收方必须检查MyService是否正在运行。为此,我在MyService中写了这个:
// Use activity in C2DMReceiver class
public static Service getCurrentService() {
return curService;
}
所以要检查接收器我这样做:
if (MyService.getCurrentService != null){
//DO ELSE
}
问题是,即使服务真正在运行,这个布尔条件总是为假。
为什么?