2016-11-16 20 views
0

Я не могу остановить диспетчер аварийных сигналов или широковещательный приемник. Любая идея решить это?Тревожный менеджер и приемник вещания не останавливаются

Большое спасибо заранее. Кстати, я использую кнопку включения/выключения будильника.

Это мой код;

MainActivity.class кнопка

public void setAlarm(Calendar alarmCalender) 
{ 
    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), REQUEST_CODE, intent, 0); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmCalender.getTimeInMillis(), pendingIntent); 

} 

public void cancelAlarm() 
{ 

    AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
    PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    aManager.cancel(pIntent); 
    stopService(intent); 
} 

Переключатель:

bolme1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean aktiflestirmisse) 
      { 
       if(aktiflestirmisse) 
       { 
        setAlarm(calSet); 
        btn1.setBackgroundColor(getResources().getColor(R.color.aktifdurum)); 
        Toast t= Toast.makeText(MainActivity.this,"Bölme 1 aktif hale getirildi.",Toast.LENGTH_SHORT); 
        t.show(); 
       } 

       else 
       { 
        cancelAlarm(); 
        btn1.setBackgroundColor(getResources().getColor(R.color.pasifdurum)); 
        Toast t = Toast.makeText(MainActivity.this, "Bölme 1 pasif hale getirildi.", Toast.LENGTH_SHORT); 
        t.show(); 
       } 

В любом случае, вот мой AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver { 
NotificationManager manager; 
private final int NOTIFICATION_ID =1; 
@Override 
public void onReceive(Context context, Intent intent) { 

    NotificationManager mng=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification.Builder nb=new Notification.Builder(context); 
    nb.setContentTitle("Hatırlatma"); 
    nb.setContentText("İlgili bölmenin vakti ilaç vakti geldi!"); 
    nb.setSmallIcon(R.drawable.alarm_uyari); 
    nb.setTicker("Bildiriminiz var."); 
    nb.setAutoCancel(true); 
    PendingIntent pi=PendingIntent.getActivity(context,NOTIFICATION_ID,intent,0); 
    nb.setContentIntent(pi); 
    Notification not=nb.getNotification(); 
    not.vibrate=new long[]{500,500,500,500}; 
    mng.notify(NOTIFICATION_ID,not); 

    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alarmUri == null) 
    { 
     alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    } 
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
    ringtone.play(); 
}} 

ответ

0

Я использовал этот код для моего приложения:

Создать отложенную намерение и обернуть наше намерение:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

//get the alarm manager 
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
if (android.os.Build.VERSION.SDK_INT >= 23) 
{ 
     alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent); 
} 
else if (android.os.Build.VERSION.SDK_INT >= 19) 
{ 
     alarmManager.setExact(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent); 
} 
else alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent); 

Отмена:

private void cancelAlarm(long id) 
{ 
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 

    Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 
    PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), (int)id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    alarmManager.cancel(sender); 
} 

Так что в вашем случае это будет вероятно, работает для установки сигнала тревоги

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmCalender.getTimeInMillis(), pendingIntent); 
+0

Первый блок для setAlarm справа? –

+0

Да, это также гарантирует, что устройство просыпается на зефире, это сложно с дозой – PrisonMike

+0

Но я получаю ошибку в переменной 'id'. Я имею в виду, я позвоню cancelAlarm (0) или (1)? –

0

Попробуйте для отмены тревожной кнопки:

public void cancelAlarm() { 
 
     Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 
 
     final PendingIntent pIntent = PendingIntent.getBroadcast(this, AlarmReceiver.REQUEST_CODE, 
 
       intent, PendingIntent.FLAG_UPDATE_CURRENT); 
 
     AlarmManager aManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
 
     aManager.cancel(pIntent); 
 
}

Там нет необходимости для StopService; как только вы пройдете .cancel до AlarmManager, он отменит услугу через трансляцию. Чтобы проверить, что он отменен, запустите в терминале «adb shell dumpsys alarm», затем выполните поиск по имени вашего пакета. иногда используя findstr или аналогично поиску сигнала тревоги в терминале, не будет отображаться фактический сигнал тревоги, а только история аварийных сигналов/пробуждений.

Дайте мне знать, если это работает! :)

+0

Я предполагаю, что я должен определить открытый final int REQUEST_CODE = 1 в AlarmReceiver? –

+0

Да, вы можете установить его на любое число в качестве идентификатора –

+0

Любой номер? должен ли я определять окончательный int REQUEST_CODE = 1 или 0? –

 Смежные вопросы

  • Нет связанных вопросов^_^