0

Я искал это с утра и упомянул большинство проблем с сигнализацией android в stackoverflow.Тревога Android запускает новую активность и сброс тревоги

Я пытаюсь установить несколько сигналов тревоги с различными намерениями. При получении будильника я хочу, чтобы будильник был отменен, и активность была впереди, если он уже запущен, или начните снова, если он был убит, но на этот раз сигнал тревоги не должен быть установлен снова. Я не хочу, чтобы другие тревоги были выполнены. В настоящее время проблема заключается в том, что нажатие на уведомление снова запускает действие и сбрасывает будильник. Если я попытаюсь отменить его с помощью alarmmanager.cancel, он вообще не уведомляет пользователя. Вот мой код, пожалуйста, помогите

Мои MainActivity Thats устанавливает несколько будильников

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Calendar cal = Calendar.getInstance();  //for using this you need to import java.util.Calendar; 

    // add minutes to the calendar object 
    cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY); 
    cal.set(Calendar.HOUR_OF_DAY, 22); 
    cal.set(Calendar.MINUTE, 8); 
// cal.add(Calendar.MINUTE, 1); 
    AlarmManager mgrAlarm = (AlarmManager) this.getSystemService(ALARM_SERVICE); 
    ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 

    for(int i = 0; i < 10; ++i) 
    { 
     Intent intent = new Intent(this, AlarmReceiver.class); 
     intent.putExtra("title", "notification no."+String.valueOf(i)); 
     intent.putExtra("NOTIFICATION_ID", String.valueOf(i)); 
     // Loop counter `i` is used as a `requestCode` 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, i, intent, 0); 
     // Single alarms in 1, 2, ..., 10 minutes (in `i` minutes) 
     mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        SystemClock.elapsedRealtime() + 60000 * i, 
        pendingIntent); 

     intentArray.add(pendingIntent); 
    } 
} 

Мой AlarmReceiver Класс

public class AlarmReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 

    NotificationManager manger = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_launcher, "Alarm App", System.currentTimeMillis()); 

      Bundle extras=intent.getExtras(); 
      String title=extras.getString("title"); 
      int notif_id=Integer.parseInt(extras.getString("NOTIFICATION_ID")); 

    //here we get the title and description of our Notification 
       Class myclass = MainActivity.class; 
      PendingIntent contentIntent = PendingIntent.getActivity(context, notif_id, 
        new Intent(context, MainActivity.class), 0); 
      String note=extras.getString("note"); 
      notification.setLatestEventInfo(context, note, title, contentIntent); 
      notification.flags = Notification.FLAG_INSISTENT; 
      notification.defaults |= Notification.DEFAULT_SOUND; 
    //here we set the default sound for our 
    //notification 
      // The PendingIntent to launch our activity if the user selects this notification 
      manger.notify(notif_id, notification); 
} 

}; 

ответ

0

В вашем MainActivity, вы можете отличить запуск от уведомления с дополнительным параметр в намерении. В любом случае вам потребуется идентификатор уведомления, чтобы отменить конкретное уведомление. Таким образом, вы можете попробовать следующее в вашем MainActivity

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

     Intent appIntent = this.getIntent(); 
     int notif_id = appIntent.getIntExtra("my_notification_id", -1) ; 
     if(notif_id != -1) 
     { 
      Log.d ("LOG_TAG", "Launched from Notification "); 
      NotificationManager nm = (NotificationManager) getSystemService( NOTIFICATION_SERVICE); 
      nm.cancel(notif_id); 

      /* Do the separate processing here */ 
      ..... 
     } 
     else 
     { 
      /* Your previous onCreate code goes here */ 

В файле AlarmReceiver.java, вам необходимо сделать следующие изменения

//PendingIntent contentIntent = PendingIntent.getActivity(context, notif_id, new   Intent(context, MainActivity.class), 0); 

Intent appIntent = new Intent( context, MainActivity.class); 
appIntent.putExtra("my_notification_id", notif_id); 
PendingIntent contentIntent = PendingIntent.getActivity(context, notif_id, appIntent, 0); 

Надеется, что это помогает.

+0

Спасибо большое ... Это было полезно – user2184523