3

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を使用してプロセスを停止すると、アラームが発生し、期待どおりに機能します。

誰かがこれが起こっている理由を理解するのを手伝ってもらえますか?アラームがスケジュールされると、デバイスを再起動しない限りアラームが持続するという印象を受けました。アラームを実行する必要があるときに、デバイスは起動しています。

4

1 に答える 1

5

マニフェストには必須のエントリがあります

android:process=":remote"反義務的です。削除してください。素早く。

実際のデバイスでMyApplicationを起動した場合、アラームを追加してから、タスクキラーを使用してプロセスを強制終了します

タスクキラーはアプリのアラームも削除しますが、この問題はAndroid2.2で解決されています。

于 2010-06-27T19:06:41.310 に答える