Skocz do zawartości
strzecha

Notificatin Manager niby prosty problem

    Rekomendowane odpowiedzi

    Witam

    Mam problem z NotificationManagerem NotificationManager | Android Developers, a mianowicie z odczytywanie ze status bara które zdarzenie zostało właśnie kliknięte. Niestety nigdzie w dokumentacji nie mogę znaleźć tej opcji więc widocznie owa opcja nie istnieje. Przybliże mój problem ( w uproszczonym pseudokodzie):

    public class Przypominacz extends Activity{
    
       private PendingIntent pendingIntent;
    public void onCreate(Bundle savedInstanceState){
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.przypomnienie);
    
    	//w tym fragmencie chodzi o to że jak aktywność jest uruchamiana 1wszy raz to wywoływana jest
                  //funkcja aktywujPrzypomnienia(id), w przeciwnym razie obsługa "klikniętego" przypomnienia
    	Bundle parametry=this.getIntent().getExtras();
    	Long id=(parametry!=null)?parametry.getLong("id"):null;
    	if(id!=null)aktywujPrzypomnienia(id);
    	else obslugaPrzypomnienia();
    }
    
    public void obslugaPrzypomnienia(){
    	//w przypadku kliknięcia notifikacji wywoływana jest tylko ta funkcja
    	AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);
    	alertDialog.setCancelable(true);
    	alertDialog.setIcon(R.drawable.icon);
    	alertDialog.setTitle("yo");
    	alertDialog.setInverseBackgroundForced(true);
    	alertDialog.setPositiveButton("Koniec", new DialogInterface.OnClickListener(){
    		public void onClick(DialogInterface DI, int ktory){
    			Intent intent=new Intent(Przypominacz.this, PrzypominaczReceiver.class);
    			pendingIntent=PendingIntent.getBroadcast(Przypominacz.this.getApplicationContext(), 1, intent, 0);
    //i tutaj w miejsce tej jedynki musze odczytać id klikniętego przypomnienia
    			AlarmManager alarmManager=(AlarmManager)Przypominacz.this.getSystemService(Przypominacz.this.ALARM_SERVICE);
    			alarmManager.cancel(pendingIntent);
    			Przypominacz.this.onBackPressed();
    		}
    	});
    	alertDialog.setNegativeButton("Uśpij", new DialogInterface.OnClickListener(){
    		public void onClick(DialogInterface DI, int ktory){
    			DI.dismiss();
    		}
    	});
    	alertDialog.show();
    }
    public void aktywujPrzypomnienia(Long idNotatki){
    // treść tej funkcji nie jest w sumie ważna, z bazy danych odczytywany jest id przypomnienia, a następnie
    	do{
    totaj jest fragment odczytujący idAlarmu z bazy danych (nie istotny w moim problemie)
    			Intent intent=new Intent(this, PrzypominaczReceiver.class);
    			intent.putExtra("idAlarmu", idAlarmu);
    			pendingIntent=PendingIntent.getBroadcast(this.getApplicationContext(), idAlarmu, intent, 0);
    			AlarmManager alarmManager=(AlarmManager)this.getSystemService(this.ALARM_SERVICE);
    			alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
    					System.currentTimeMillis()+5*1000,
    					15*1000, pendingIntent);
    
    
    		}while(odczytaj notatke);		
    	}
    	pomocnikBD.zamknij();
    }
    
    }
    

    uprzedzając pytania zamieszczam klase Receiver:

    public class PrzypominaczReceiver extends BroadcastReceiver{
    private NotificationManager manager; 
    
    public void onReceive(Context context, Intent intent){
    	manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    	Notification notification = new Notification(R.drawable.icon, "Wake up alarm", System.currentTimeMillis());
    	Intent intentNotifikacji=new Intent(context, Przypominacz.class);
    	intentNotifikacji.putExtra("idAlarmu", intent.getExtras().getInt("idAlarmu"));
    	PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intentNotifikacji, 0);
    	notification.setLatestEventInfo(context, String.valueOf(intent.getExtras().getInt("idAlarmu")), "tekst", contentIntent);
    	notification.flags = Notification.FLAG_ONGOING_EVENT|Notification.FLAG_INSISTENT|Notification.FLAG_AUTO_CANCEL;
    }
    
    }
    

    Poszukuje sposobu aby odczytać idAlarmu z wysłanego wcześniej idAlarmu poprzez extras do receivera, a następnie aby w przypadku kliknięcia owego przypomnienia na statusBarze odczytanie tego id w zrestartowanej aktywności... jakieś pomysły bo już siedze z tym problemem z tydzień i nic nie wymyśliłem (żadne finalne statyczne pola mi nie pomagają)

    Mam nadzieje że nie zamotałem zbytnio.

    Pozdro

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    Przecież wpisujesz do notyfikacji intent, który ma zostać wywołany po kliknięciu, ten sam intent jest przekazywany do Activity

    Możesz go odczytać:

    Activity | Android Developers

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @piotrpo

    właśnie z tym miałem problem cały czas, na szczęście metodą prób i błędów doszedłem, że id o którym mówiłem przesyłamy w miejscu gdzie było zero (teraz wstawiłem intent.getExtras().getInt("idAlarmu")-1, teraz działa, nie wiem dlaczego ma być -1 ale ważne że działa

    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intentNotifikacji, intent.getExtras().getInt("idAlarmu")-1);
    

    Dzięki za pomoc temat do zamknięcia

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x