AlarmManager の使用方法を学習するために、1 つのボタンで構成されるアクティビティを作成しました。ボタンが押されると、アクティビティはそれ自体のインテントを作成し、それを 3 秒後に AlarmManager にロードしてから終了します。
アクティビティが開き、ユーザーがボタンを押すと、アクティビティが閉じ、3 秒後にアクティビティが開き、繰り返します。
問題は、3 秒後にアクティビティを開くのではなく、次のエラーが表示されることです。「アプリケーション [myappname] が予期せず停止しました。もう一度お試しください。」代わりにトーストを呼び出す場合を除いて、それは機能しました。
ボタンのコードは次のとおりです。
thanksButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
setResult(RESULT_OK);
Intent intent = new Intent(myappname.this,
myappnameBroadcastReceiver.class);
PendingIntent appIntent = PendingIntent.getBroadcast
(myappname.this, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 3);
AlarmManager am = (AlarmManager)getSystemService
(ALARM_SERVICE);
am.set(AlarmManager.RTC, calendar.getTimeInMillis(),
appIntent);
finish();
}
});
放送受信機は次のとおりです。
package com.myappname;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class myappnameBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startActivity(new Intent(context, myappname.class));
}
}
これがmanifest.xmlの行です
<receiver
android:name=".myappnameBroadcastReceiver"
android:process=":remote">
</receiver>