いつもお世話になっております。
AlarmManagerの停止について質問です。
バックグラウンド処理を実行するプログラムを書きました。
アプリが前面にいなくても時間になったら起動するようなプログラムを作ろうとしているところです。
実際に動作させると初めの一回は希望通りに時間になったらホーム画面からアプリの起動を行ってくれるのですが、
二回目以降はアプリを閉じたらすぐに起動してしまいます。
いろいろと調べた結果、一回目のバックグラウンド処理がうまく終了できていなくてずっと動き続けているからだと思うのですが
ネットで調べた「 PendingIntent を毎回作成する」、「開始時と同じようにIntentなどを設定する」などはできていると思うのですが
うまく実行できていません。
どなたか間違っているところ、おかしなところを教えていただけませんか?
それとも、この処理は問題なくてほかの問題でしょうか?
以上よろしくお願いします。
// バックグラウンド処理開始
public void startBackGround( ){
Intent intent = new Intent(getApplicationContext(), ReceivedActivity.class); // ReceivedActivityを呼び出すインテントを作成
PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); // ブロードキャストを投げるPendingIntentの作成
int time = (set_hour * 60 * 60) + (set_minute * 60); // 予約時間までの時間(s)
Log.i("cycle","----time: "+time);
Calendar calendar = Calendar.getInstance(); // Calendar取得
calendar.setTimeInMillis(System.currentTimeMillis()); // 現在時刻を取得
calendar.add(Calendar.SECOND,time);
AlarmManager am = (AlarmManager)MainActivity.this.getSystemService(ALARM_SERVICE); // AlramManager取得
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
}
// バックグラウンド処理停止
public void stopBackGround(){
// Pending Intent使ってレシーバーをセットする
Intent intent = new Intent(getApplicationContext(), ReceivedActivity.class); // ReceivedActivityを呼び出すインテントを作成
PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); // ブロードキャストを投げるPendingIntentの作成
// アラームを解除する
AlarmManager am = (AlarmManager)MainActivity.this.getSystemService(ALARM_SERVICE);
am.cancel(sender);
}
public class ReceivedActivity extends BroadcastReceiver {
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "called ReceivedActivity", Toast.LENGTH_SHORT).show();
Log.i("ReceivedActivity","called ReceivedActivity");
intent.setClass(context, MainActivity.class); // 起動させるActivityをセット
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Activity以外からの起動のため必要
context.startActivity(intent); // セットしたActivityの起動
}
}