0

以下に示すように、開始アラームを作成しました

 public class MyScheduleReceiver extends BroadcastReceiver {

   // Restart service every 30 seconds
private static final long REPEAT_TIME = 1000 * 5;

@Override
public void onReceive(Context context, Intent intent) {
  AlarmManager service = (AlarmManager) context
    .getSystemService(Context.ALARM_SERVICE);
 Intent i = new Intent(context, MyStartServiceReceiver.class);
 PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
    PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 5);
service.setInexactRepeating(AlarmManager.RTC_WAKEUP,
    cal.getTimeInMillis(), REPEAT_TIME, pending);

これを停止アラーム用にクレートし、メイン アクティビティから呼び出します。

      public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.setup);

    sendBroadcast(new Intent(this,MyScheduleReceiver.class));

}

public void StopRepeat(View view) {

    sendBroadcast(new Intent(this,MyStopReceiver.class));   

}

 public class MyStartServiceReceiver extends BroadcastReceiver {


 public void onReceive(Context context, Intent intent) {

  Toast.makeText(context, "Repeat service!.",
           Toast.LENGTH_LONG).show();
    }

  public class MyStopReceiver extends BroadcastReceiver {

  // Restart service every 30 seconds
  private static final long REPEAT_TIME = 1000 * 5;

  @Override
  public void onReceive(Context context, Intent intent) {
    AlarmManager service = (AlarmManager) context
        .getSystemService(Context.ALARM_SERVICE);
    Intent istop = new Intent(context, MyStartServiceReceiver.class);
    PendingIntent pending = PendingIntent.getBroadcast(context, 0, istop,
        PendingIntent.FLAG_CANCEL_CURRENT);
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, 5);

      service.cancel(pending);

しかし、サービスは停止していません。何が問題なのですか?ありがとうございます。

4

1 に答える 1

0

最も簡単なオプションは、デバイスを再起動することです。BOOT_COMPLETED(リスナーを作成した場合は、とりあえず削除してください。)

アラームの作成に使用した PendingIntent を に渡すことで、アラームをキャンセルすることもできますAlarmManager#cancel()。これを行うコードは既に作成していますandroid:onClick="StopRepeat"、XML 属性を持つボタンはありますsetup.xmlか? クリックしましたか?


解決策
最終的にマニフェスト ファイルに誤りがあることが判明したため、MyStopServiceReceiver呼び出されることはありませんでした...

于 2013-01-13T18:28:20.717 に答える