2016-01-26 4 views
1

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

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(); 
    } 
} 

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

ответ

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"); 
} 

}