Skocz do zawartości
daktarin

Alarm Manager - notyfikacja pojawia się tylko raz

    Rekomendowane odpowiedzi

    Cześć,

    problem - notyfikacja (zarówno w Oreo jak i niższych wersjach androida) pojawia się tylko raz. Po uruchomieniu aplikacji. Chciałbym aby powiadomienie pojawiało się sekwencyjnie, co 10 sekund.

    Gdzie leży błąd? Co poprawić? Będę Wam wdzięczny za wskazówki!

    MainActivity.java

    package eu.marcin.notyfikacjemozeokwreszcie;
    
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import java.util.Calendar;
    
    public class MainActivity extends AppCompatActivity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
            Intent notificationIntent = new Intent(this, AlertReceiver.class);
            PendingIntent broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 5);
    
            if (Build.VERSION.SDK_INT >= 23)
            {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 10000, broadcast);
            }
            else if (Build.VERSION.SDK_INT >= 19)
            {
                alarmManager.setExact(AlarmManager.RTC_WAKEUP, 10000, broadcast);
            }
            else
            {
                alarmManager.set(AlarmManager.RTC_WAKEUP, 10000, broadcast);
            }
        }
    
    }

    AlertReceiver.java

    package eu.marcin.notyfikacjemozeokwreszcie;
    
    import android.app.Notification;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.TaskStackBuilder;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    
    import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
    
    public class AlertReceiver extends BroadcastReceiver {
    
        private static final String CHANNEL_ID = "567";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent notificationIntent = new Intent(context, NotificationActivity.class);
    
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
            stackBuilder.addParentStack(NotificationActivity.class);
            stackBuilder.addNextIntent(notificationIntent);
    
            PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
            Notification.Builder builder = new Notification.Builder(context);
            Notification notification = builder.setContentTitle("Tytuł powiadimienia")
                    .setContentText("Tekst powiadomienia")
                    .setTicker("Nowa wiadomość")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentIntent(pendingIntent).build();
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder.setChannelId(CHANNEL_ID);
            }
    
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        CHANNEL_ID,
                        "NotificationDemo",
                        IMPORTANCE_DEFAULT
                );
                notificationManager.createNotificationChannel(channel);
            }
    
            notificationManager.notify(0, notification);
        }
    }

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="eu.marcin.notyfikacjemozeokwreszcie">
    
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            <receiver android:name="eu.marcin.notyfikacjemozeokwreszcie.AlertReceiver"></receiver>
            <activity android:name="eu.marcin.notyfikacjemozeokwreszcie.NotificationActivity" />
            <activity android:name="eu.marcin.notyfikacjemozeokwreszcie.MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    
    </manifest>

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)

    Metody, których używasz uruchamiają alarm tylko raz. Musisz ponownie alarm ustawić alarm w metodzie onReceive klasy AlertReceiver (ja dodałem jeszcze dla pewności Toasta który się wyświetla za każdym razem)
     

    //Twój kod pozostaje tak jak był, na końcu dodałem uruchomienie alarmu
    @Override
        public void onReceive(Context context, Intent intent) {
            Intent notificationIntent = new Intent(context, NotificationActivity.class);
    
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
            stackBuilder.addParentStack(NotificationActivity.class);
            stackBuilder.addNextIntent(notificationIntent);
    
          PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
            Notification.Builder builder = new Notification.Builder(context);
            Notification notification = builder.setContentTitle("Tytuł powiadimienia")
                    .setContentText("Tekst powiadomienia")
                    .setTicker("Nowa wiadomość")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentIntent(pendingIntent).build();
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder.setChannelId(CHANNEL_ID);
            }
    
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        CHANNEL_ID,
                        "NotificationDemo",
                        IMPORTANCE_DEFAULT
                );
                notificationManager.createNotificationChannel(channel);
            }
    
            notificationManager.notify(0, notification);
    
            Intent notificationIntent2 = new Intent(context, AlertReceiver.class);
            PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, notificationIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
    
          
          
            Toast.makeText(context, "This is my Toast message!",
                    Toast.LENGTH_SHORT).show();
    
          //TUTAJ PONOWNE URUCHOMIENIE ALARMU
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            
            // usunięcie starego alarmu 
            alarmManager.cancel(broadcast);
            // ustawienie nowego
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, 2000, broadcast);
    
        }

    W MainActivity nie bawiłem się w rozróżnianie wersji androida tylko użyłem również metody setExact:

    public class MainActivity extends AppCompatActivity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
            Intent notificationIntent = new Intent(this, AlertReceiver.class);
            PendingIntent broadcast = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 5);
    
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, 2000, broadcast);
    
        }
    
    }

    Ogólnie google utrudnia użycie AlarmManagera - czasy ponownego uruchomienia alarmu mogą być narzucone. Na przykład nie można uruchomić alarmu częściej niż co 5 minut :P Jest to upierdliwe dla developerów, ale z drugiej strony użytkownicy aplikacji nie są takimi alarmami zalewani. Z mojej strony polecam zapoznać się z artykułem: https://developer.android.com/topic/performance/scheduling

    Edytowane przez Coders Lab

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @Coders Lab  Zmieniłem kod na taki jak mówiłeś. Teraz efekt jest taki, że notyfikacje wyskakują non-stop (nie ma nawet chwili przerwy między tym jak usunę notyfikacje z paska, a już pojawia się następna). Toast zanim jeszcze zdąży zniknąć - pojawia się na nowo.

    W Alert Receiver ustawiłęm nawet:

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_FIFTEEN_MINUTES, broadcast);

    ale nic to nie daje. ??

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @daktarin Do swoich testów ustawiłem 2 sekundy odstępu. Spróbuj tak: 
     

     alarmManager.setExact(AlarmManager.RTC_WAKEUP, 10000, broadcast); //teraz będzie co 10 sekund

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @Coders Lab Nic to nie zmieniło. Nagrałem filmik jak to wygląda:

     

    Dla pewności załączam również kod

    MainActivity.java

    package eu.huras.myapplication;
    
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.Toast;
    
    import java.util.Calendar;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
            Intent notificationIntent = new Intent(this, AlertReceiver.class);
            PendingIntent broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 5);
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, 10000, broadcast); //teraz będzie co 10 sekund
        }
    }

    AlertReceiver.java

    package eu.huras.myapplication;
    
    import android.app.AlarmManager;
    import android.app.Notification;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.TaskStackBuilder;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    import android.widget.Toast;
    
    import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
    
    public class AlertReceiver extends BroadcastReceiver {
    
        private static final String CHANNEL_ID = "567";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent notificationIntent = new Intent(context, NotificationActivity.class);
    
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
            stackBuilder.addParentStack(NotificationActivity.class);
            stackBuilder.addNextIntent(notificationIntent);
    
            PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
            Notification.Builder builder = new Notification.Builder(context);
            Notification notification = builder.setContentTitle("Tytuł powiadimienia")
                    .setContentText("Tekst powiadomienia")
                    .setTicker("Nowa wiadomość")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentIntent(pendingIntent).build();
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder.setChannelId(CHANNEL_ID);
            }
    
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        CHANNEL_ID,
                        "NotificationDemo",
                        IMPORTANCE_DEFAULT
                );
                notificationManager.createNotificationChannel(channel);
            }
    
            notificationManager.notify(0, notification);
            Intent notificationIntent2 = new Intent(context, AlertReceiver.class);
            PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, notificationIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
            Toast.makeText(context, "This is my Toast message!", Toast.LENGTH_SHORT).show();
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(broadcast);
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, 10000, broadcast); //teraz będzie co 10 sekund
        }
    }

    AndroidManifestu nie zmieniałem.

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @daktarin Dobra wiem w czym rzecz.. moje przeoczenie, sorki
    tryb:

    AlarmManager.RTC_WAKEUP

    oznacza że alarm uruchomi się na zadany czas zegara. Zadanym czasem zegara jest 10 sekunda od początku świata xD (czyli od 1 stycznia 1970 roku godziny 0:00 - początek czasu unixowego). Czyli alarm musi uruchomić się po 10 sekundzie od początku czasu unixowego, która już dawno minęła i kolejny alarm ma ten sam warunek. Przez to tak szybko powiadomienia Ci się pojawiają.

    Aby powiadomienia były wyświetlane co 10 sekund należy do obecnego czasu dodać 10 sekund:

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, broadcast);

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @Coders Lab Mam jeszcze problem ze wznowieniem notyfikacji po ponownym uruchomieniu telefonu, i ponownym uruchomieniu aplikacji. Idea jest taka, że wykorzystuję do tego celu zmienną logiczną, którą zapisuje w SharedPreferences. Ale coś jest nie tak. Tzn. kiedy mam uruchomioną apkę z włączonymi powiadomieniemi i wyłączę telefen, to po ponownym uruchomieniu telefonu i potem apki, notyfikacje się nie pojawiają (a raczej wznawiają się ale po kilku minutach, potem już idą normalnie). Funkcja f_wznow_powiadomienia się wykonuje (bo sprawedzam to Toastem), ale pierwsza "wznowiona" notyfikacja pojawia sięw właśnie z takim mega opóźnieniem - a nie po 10 sekundach...

    Poniżej załczam kod obu klas (innych rzeczy nie zmieniałem):

    MainActivity.java

    package eu.huras.myapplication;
    
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Build;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import java.util.Calendar;
    
    public class MainActivity extends AppCompatActivity {
    
        public static final String preference = "pref";
        public static final String saveIt = "saveKey";
        SharedPreferences sp;
        static boolean czy_ustawiono_powiadomienia;
    
        Button btn_on_off_notification;
    
        AlarmManager alarmManager;
        Intent notificationIntent;
        PendingIntent broadcast;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //pobieram wartość logiczną z sp
            sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);//
            czy_ustawiono_powiadomienia = sp.getBoolean(saveIt, false);//
           
            btn_on_off_notification = (Button) findViewById(R.id.btn_on_off_notification);
            if (czy_ustawiono_powiadomienia == true) {
                f_wznow_powiadomienia();
                btn_on_off_notification.setText("USUŃ POWIADOMIENIA");
            } else if (czy_ustawiono_powiadomienia == false) {
                btn_on_off_notification.setText("USTAW POWIADOMIENIA");
            }
    
        }
    
    
        public void f_ustaw_wylacz_powiadomienia(View view) {
    
            btn_on_off_notification = (Button) findViewById(R.id.btn_on_off_notification);
    
            if (czy_ustawiono_powiadomienia == false) {
    
                alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
                notificationIntent = new Intent(this, AlertReceiver.class);
                broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
                Calendar cal = Calendar.getInstance();
                cal.add(Calendar.SECOND, 5);
    
                if (android.os.Build.VERSION.SDK_INT >= 19) {
                    alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
                } else {
                    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
                }
                btn_on_off_notification.setText("USUŃ POWIADOMIENIA");
    
                sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();
                editor.putBoolean(saveIt, true);
                editor.commit();
                czy_ustawiono_powiadomienia = true;
    
            } else if(czy_ustawiono_powiadomienia == true){
                alarmManager.cancel(broadcast);
                btn_on_off_notification.setText("USTAW POWIADOMIENIA");
    
                sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();
                editor.putBoolean(saveIt, false);
                editor.commit();
                czy_ustawiono_powiadomienia = false;
            }
    
        }
    
    
        public void f_wznow_powiadomienia() {
    
            Toast.makeText(this, "WZNOWIONO PO PONOWNYM URUCHOMIENIU", 2000).show();
    
            alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
            notificationIntent = new Intent(this, AlertReceiver.class);
            broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 5);
    
            if (android.os.Build.VERSION.SDK_INT >= 19) {
                alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
            } else {
                alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
            }
    
            btn_on_off_notification.setText("USUŃ POWIADOMIENIA");
    
            sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);
            SharedPreferences.Editor editor = sp.edit();
            editor.putBoolean(saveIt, true);
            editor.commit();
            czy_ustawiono_powiadomienia = true;
        }
    }

     

    AlertReceiver

    package eu.huras.myapplication;
    
    import android.app.AlarmManager;
    import android.app.Notification;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.TaskStackBuilder;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    
    import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
    
    public class AlertReceiver extends BroadcastReceiver {
    
    
        private static final String CHANNEL_ID = "567";
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
            Intent notificationIntent = new Intent(context, NotificationActivity.class);
    
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
            stackBuilder.addParentStack(NotificationActivity.class);
            stackBuilder.addNextIntent(notificationIntent);
    
            PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
            Notification.Builder builder = new Notification.Builder(context);
            Notification notification = builder.setContentTitle("tytul powiadomienia")
                    .setContentText("tekst powiadomienia")
                    .setTicker("powiadomienie")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent).build();
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder.setChannelId(CHANNEL_ID);
            }
    
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        CHANNEL_ID,
                        "NotificationDemo",
                        IMPORTANCE_DEFAULT
                );
                notificationManager.createNotificationChannel(channel);
            }
    
            notificationManager.notify(0, notification);
    
            Intent notificationIntent2 = new Intent(context, AlertReceiver.class);
            PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, notificationIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
    
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    
            alarmManager.cancel(broadcast);
    
            if (Build.VERSION.SDK_INT >= 19) {
                if (MainActivity.czy_ustawiono_powiadomienia == true) {
                    alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast);
                } else {
                    alarmManager.cancel(broadcast);
                }
    
            } else {
                if (MainActivity.czy_ustawiono_powiadomienia == true) {
                    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast);
                } else {
                    alarmManager.cancel(broadcast);
                }
            }
        }
    }
    



    Będę wdzięczny za pomoc...

    Edytowane przez daktarin

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Prawdopodobnie jest to związane z  Doze i App Standby  Ponieważ przeprowadziłem testy na starszym androidzie (5.1) i tam po reboocie działało bezproblemowo.
    Więcej o tym temacie możesz dowiedzieć się tutaj: Optimize for Doze and App Standby 
    Oczywiście, jeżeli zależy Ci żeby notyfikacja była odpalana od razu, to musisz zrobić to bez Alarmu - bo zakładam że to on jest tutaj problemem. Twórz pierwszą notyfikację wprost, zaraz po uruchomieniu aplikacji. Jeżeli chcesz odpalać ją po 10 sekundach to możesz posłużyć się moją odpowiedzią, z Twojego innego tematu:

     

    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ę

    • Przeglądający   0 użytkowników

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