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");
}
次に、受信者は MyService が実行されているかどうかを確認する必要があります。そのために、MyService 内に次のように記述します。
// Use activity in C2DMReceiver class
public static Service getCurrentService() {
return curService;
}
したがって、レシーバーをチェックインするには、次のようにします。
if (MyService.getCurrentService != null){
//DO ELSE
}
問題は、サービスが実際に実行されている場合でも、このブール条件が常に false になることです。
なんで?