2013-07-12 11 views
13

W mojej głównej działalności, która ma przycisk w nim. W swojej onclick słuchacza im funkcji wywołującej ustawić alarm.The alarm działa, ale iam nie jest w stanie zatrzymać go .Can ktoś miJak zatrzymać alarm w Androidzie

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

Po uruchomieniu alarmu otrzymuję zwrotnego w odbiorniku na 01.234.metoda. Stamtąd idę do działania Alset, gdzie trzymałem przycisk stop. Jak mam teraz przerwać alarm?

UWAGA: - Nie ustawiam czasu na ustawienie alarmu.

+1

trzeba anulować alarm z menedżerem alarmowego spróbować ==== AlarmManager alarmManager = (AlarmManager) _cntx.getSystemService (Context.ALARM_SERVICE); PendingIntent pendingIntent = PendingIntent.getBroadcast (this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA); \t \t \t alarmManager.cancel (pendingIntent); – user1140237

Odpowiedz

29

można anulować alarm tak:

 Intent intent = new Intent(this, Mote.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1253, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 

Ponadto, należy usunąć Intent.FILL_IN_DATA z wezwaniem do getBroadcast() w kodzie, gdzie można ustawić alarm.

+0

@droid_dev Jeśli masz problemy, otwórz nowe pytanie i opublikuj swój kod i wyjaśnij, co nie działa. Społeczność może ci pomóc. –

+1

alarmManager.cancel (pendingIntent) po prostu anuluje alarm z menedżera alarmManager. nie zabije zwolnionej pracy. Podniosłem również pytanie, jak zabić wypaloną działalność. refer http://stackoverflow.com/questions/29735209/android-repeating-alam-is-not-getting-stopperd-on-t--stop-button-clicked pls odpowiedz, jeśli ktoś zna odpowiedź –

+0

Moje początkowe intencje dodają akcję więc aby to działało, dodam, aby dodać tę samą akcję do intencji. – Favolas

3

trzeba anulować alarm z menedżerem alarmowego spróbować,

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