Dans mon activité principale qui contient un bouton. Dans son écouteur onclick, j'appelle la fonction pour régler l'alarme.L'alarme fonctionne mais je ne suis pas en mesure de l'arrêter.Peut quelqu'un m'aider
MainActivity.Java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setalarm();
}
});
}
private void setalarm() {
Calendar cal=Calendar.getInstance();
// cal.set(Calendar.MONTH,6);
// cal.set(Calendar.YEAR,2013);
// cal.set(Calendar.DAY_OF_MONTH,12);
cal.set(Calendar.HOUR_OF_DAY,18);
cal.set(Calendar.MINUTE,32);
Intent intent = new Intent(this, Mote.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT| Intent.FILL_IN_DATA);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent );
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
Toast.makeText(this, "Alarm SET.", Toast.LENGTH_LONG).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Mote.Java:
public class Mote extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
int icon = R.drawable.ic_launcher;
CharSequence tickerText = "Hello you have to take medicine I am Nitin Sharma";
long when = System.currentTimeMillis();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
final int NOTIF_ID = 1234;
NotificationManager notofManager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(context, Alset.class);
PendingIntent contentIntent = PendingIntent.getActivity(context,0, notificationIntent, 0);
Notification notification = new Notification(icon, tickerText,when );
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.flags = Notification.FLAG_INSISTENT;
notification.defaults |= Notification.DEFAULT_SOUND;
notofManager.notify(NOTIF_ID,notification);
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
Intent i = new Intent(context,Alset.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Alset.Java:
public class Alset extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activitystop);
Log.e("IM here ","Im here");
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Alset.this, "Stop the alrm now", Toast.LENGTH_LONG).show();
}
});
}
}
Une fois l'alarme déclenchée, je recevrai le rappel dans la méthode OnReceive()
du récepteur. De là, je vais à l'activité Alset où j'ai gardé un bouton d'arrêt. Comment puis-je arrêter l'alarme à partir d'ici?
REMARQUE: - Je code en dur l'heure pour régler l'alarme.
Vous pouvez annuler l'alarme comme ceci:
Intent intent = new Intent(this, Mote.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1253, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
En outre, vous devez supprimer Intent.FILL_IN_DATA
De votre appel à getBroadcast()
dans le code dans lequel vous avez défini l'alarme.
vous devez annuler l'alarme du gestionnaire d'alarmes, essayez ceci,
Intent intent = new Intent(this, Mote.class);
AlarmManager alarmManager = (AlarmManager) _cntx.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT| Intent.FILL_IN_DATA);
alarmManager.cancel(pendingIntent);