Android отменить диспетчер будильника

Я пытаюсь протестировать аварийный менеджер, и я могу заставить его работать. Через BroadcastReceiver я запускаю службу для создания уведомления. Мне удалось это сделать с помощью материалов, которые я также нашел здесь. Проблема, с которой я столкнулся сейчас и которая заставила меня застрять на день, - это отмена созданного мной повторяющегося будильника. Он только сказал, что он должен соответствовать ожидающему намерению, которое использовалось для его создания, и я также жестко закодировал идентификаторы, чтобы убедиться, что они совпадают. Для неподготовленного глаза, такого как мой, я не вижу разницы с примерами, которые я прочитал здесь, но я надеюсь, что вы поможете мне найти то, что мне нужно изменить.

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;


import java.util.Calendar;

public class CreateNotificationActivity extends Activity {

    private PendingIntent pendingIntent;
    private static AlarmManager alarmManager;
    private Intent myIntent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(alarmManager == null){
            alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        }

        myIntent = new Intent(this , Receiver.class);

    }

    public void createNotification(View view) {

        pendingIntent = PendingIntent.getBroadcast(this, 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        Calendar calendar = Calendar.getInstance();
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000, pendingIntent);
    }

    public void cancelNotification(View view) {

        pendingIntent = PendingIntent.getBroadcast(this, 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.cancel(pendingIntent);
        pendingIntent.cancel();
    }
}

как отменить будильник, который я создал? и есть ли способ отменить все тревоги без идентификатора?


person tiredeyes    schedule 26.01.2016    source источник


Ответы (1)


Это решило мою проблему.

public class Alarm extends BroadcastReceiver

{

Calendar calendar;
String title;
String message;

@Override
public void onReceive(Context context, Intent intent)
{
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();

    // Put here YOUR code.
    Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationManager mNM = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    Intent intent1 = new Intent(context.getApplicationContext(), TodayScreenActivity.class);
    PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent1, 0);

    String t = intent.getStringExtra("title");
    String m = intent.getStringExtra("message");

    Notification mNotify = new Notification.Builder(context)
            .setContentTitle(t)
            .setContentText(m)
            .setSmallIcon(android.R.drawable.ic_dialog_alert)
            .setContentIntent(pIntent)
            .setSound(sound)
            .addAction(0, "Load Workbook", pIntent)
            .build();



    mNM.notify(intent.getIntExtra("id", 1), mNotify);

    wl.release();
}

public void SetRepeatAlarm(Context context, Calendar c, int interval, int id)
{
    AlarmManager am=(AlarmManager)context.getSystemService( Context.ALARM_SERVICE);
    Intent i = new Intent(context, Alarm.class);
    i.putExtra("title", title);
    i.putExtra("message", message);
    i.putExtra("id", id);
    PendingIntent pi = PendingIntent.getBroadcast(context, id, i, PendingIntent.FLAG_UPDATE_CURRENT);
    am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), interval, pi); //1000 * 60 * 60 * 24 Millisec * Second * Minute * hours
    Log.d("Dell", "Alarm - SetRepeatAlarm");
}

public void CancelAlarm(Context context, Task task)
{
    Intent intent = new Intent(context, Alarm.class);
    PendingIntent sender = PendingIntent.getBroadcast(context, (int)task.getTASK_COL_ID(), intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(sender);
    Log.d("Dell", "Alarm - CancelAlarm");
}

}

person tiredeyes    schedule 02.02.2016