AlarmManagerを呼び出すアプリケーションがあります
Intent intent;
intent = new Intent(context, MyEventReceiver.class);
PendingIntent appIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
appIntent);
マニフェストには必須のエントリがあります
<receiver android:name=".MyEventReceiver"
android:process=":remote" />
MyEventReceiverは次のようになります
public class MyEventReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
try
{
// DO SOME WORK
}
catch (Exception e)
{
Log.e("MyEventReceiver", e.getMessage().toString());
}
}
}
アラームがアクティブになったら、MyEventReceiverを起動して、アプリケーションが実行されていない場合でも何かを実行する必要があります。エミュレータではこれが当てはまりますが、実際のデバイスではそうではありません。
例として、エミュレータでMyApplicationを起動し、DDMSで実行中のMyApplicationのプロセスを確認できます。MyApplication内からアラームを追加し、DDMS内でMyApplicationのプロセスを強制終了します。アラームが発生すると、MyEventReceiverが機能し、DDMSにMyApplicationとMyApplication:remoteの2つのプロセスが表示されます。
実際のデバイスでMyApplicationを起動した場合、アラームを追加し、アラームが何も実行されないようになったときにタスクキラーを使用してプロセスを強制終了します。デバイスをデバッガーに接続し、デバイスのタスクキラーの代わりにDDMSを使用してプロセスを停止すると、アラームが発生し、期待どおりに機能します。
誰かがこれが起こっている理由を理解するのを手伝ってもらえますか?アラームがスケジュールされると、デバイスを再起動しない限りアラームが持続するという印象を受けました。アラームを実行する必要があるときに、デバイスは起動しています。