Co to jest Android PendingIntent?

Jestem nowicjuszem Androida. Czytałem dokumentację Androida, ale nadal potrzebuję więcej wyjaśnień. Czy ktoś może mi powiedzieć, czym dokładnie jest PendingIntent?

Author: edwoollard, 2010-05-11

18 answers

A PendingIntent jest tokenem, który można przekazać do aplikacji zagranicznej (np. NotificationManager, AlarmManager, Ekran główny AppWidgetManager, lub inne aplikacje innych firm), który pozwala aplikacji zagranicznej korzystać z uprawnień aplikacji do wykonania predefiniowanego fragmentu kodu.

Jeśli nadasz zagranicznej aplikacji intencję, wykona ona twoją Intent z własnymi uprawnieniami. Ale jeśli nadasz aplikacji zagranicznej PendingIntent, ta aplikacja wykona Intent używając Twojej aplikacji pozwolenie.

 784
Author: Lie Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 10:39:13

Intencja

Intencje są standardowym mechanizmem przesyłania wiadomości w Androidzie, który wyraża zamiar wykonania przez użytkownika jakiejś pracy. Pozwalają na interakcję z innymi komponentami zdefiniowanymi przez Ciebie lub przez system operacyjny Android.

Przykład:

  1. nadaj wiadomość
  2. Uruchom kamerę
  3. Uruchom usługę
  4. Uruchom aktywność
  5. Wyświetl stronę internetową lub listę kontaktów
  6. Wybierz telefon numer lub odebrać telefon

    Są używane w obie strony

1) przez Ciebie do wywołania komponentu

2) przez system, aby powiadomić Cię o jakimś zdarzeniu.

Logiczny przepływ pracy przy tworzeniu intencji jest zwykle następujący:
  • Utwórz intencję
  • b. Dodaj opcje intencji - > Ex. jakiego rodzaju intencję wysyłamy do systemu operacyjnego lub jakichkolwiek atrybutów związanych z tą intencją, takich jak ciąg tekstowy lub coś, co jest przekazywane wraz z intencją
  • C. Uruchom intencję

Przykład z Prawdziwego Życia: powiedzmy, że budzę się rano i "Intent" iść do toalety. Najpierw będę musiał pomyśleć o pójściu do toalety, ale to tak naprawdę nie doprowadza mnie do toalety. Wtedy będę musiał powiedzieć mojemu mózgowi, żeby najpierw wstał z łóżka, potem poszedł do toalety, a potem wypuścił, potem umył ręce, potem poszedł i wytarł ręce. Gdy już wiem, dokąd zmierzam, wysyłam rozkaz zacząć, a moje ciało podejmie działanie.

PENDINGINTENT

A PendingIntent określa działanie do podjęcia w przyszłości. Pozwala przekazać przyszłą intencję innej aplikacji i pozwolić tej aplikacji wykonać tę intencję tak, jakby miała same permissions as your application, niezależnie od tego, czy Twoja aplikacja jest nadal w pobliżu, kiedy intencja jest ostatecznie wywołana. Jest to token, który przekazujesz zagranicznej aplikacji, która pozwala zagranicznej aplikacji korzystać z uprawnień Twojej aplikacji aby wykonać predefiniowany fragment kodu.

Dając PendingIntent innej aplikacji, przyznajesz jej prawo do wykonania operacji, którą podałeś tak, jakby inna aplikacja była sobą (z tymi samymi uprawnieniami i tożsamością). W związku z tym, powinieneś uważać na to, jak budujesz PendingIntent: często, na przykład, podstawowa Intencja, którą podasz, będzie miała nazwę komponentu jawnie ustawioną na jeden z twoich własnych komponentów, aby upewnić się, że zostanie on ostatecznie wysłany tam i nigdzie else.

Jest to działanie intencyjne, które chcesz wykonać, ale w późniejszym czasie. Pomyśl o tym, jak umieścić intencję na lodzie. Powodem, dla którego jest to potrzebne, jest to, że intencja musi zostać utworzona i uruchomiona z ważnego Context w Twojej aplikacji, ale są pewne przypadki, w których nie jest ona dostępna w momencie, gdy chcesz uruchomić akcję, ponieważ technicznie znajdujesz się poza kontekstem aplikacji (dwa typowe przykłady to uruchomienie działania z powiadomienia lub BroadcastReceiver.]} chcesz użyć do uruchomienia, powiedzmy, aktywności, gdy masz Context, Aby to zrobić (z wewnątrz innej aktywności lub usługi)

Kontynuując przykład z prawdziwego życia: powiedzmy, że chcę wziąć prysznic, ale chcę wziąć prysznic po umyciu zębów i zjedzeniu śniadania. Więc wiem, że nie będę brać prysznica przez co najmniej 30-40 minut. Wciąż mam w głowie, że muszę przygotować ubrania, a następnie wejść po schodach z powrotem do łazienki, a następnie rozebrać się, a następnie wziąć prysznic. Jednak tak się nie stanie aż minęło 30-40 minut. Teraz mam zamiar wziąć prysznic. Trwa 30-40 minut.

To jest praktycznie różnica między intencją oczekującą a intencją regularną. W skrócie:

Intencja Regularna -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

Intencja Oczekująca -> REQUIRES A REGULAR INTENT TO BE CREATED

Intencje są dwóch typów- Explicit i Implicit

Explicit Intent: gdy aplikacja jest świadoma, który komponent wywołać, aby wykonać jakąś akcję

Implicit Intent: gdy aplikacja nie jest świadoma, który komponent może dokładnie wykonać żądaną akcję. W przypadku Ex, jeśli po prostu powiesz, że chcesz wyświetlić adres URL, system decyduje, który komponent spełni zamiar.

Dla lepszego i jasnego zrozumienia intencji. Vist below links

  1. Slidenerd.com
  2. Android Intent Tutorial
  3. Trochę Więcej
 234
Author: Shakeeb Ayaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 04:50:52

Intencja oczekująca to token, który dajesz aplikacji, aby wykonała akcję w imieniu aplikacji niezależnie od tego, czy proces aplikacji jest żywy, czy nie.

Myślę, że dokumentacja jest wystarczająco szczegółowa: oczekujące dokumenty intencyjne .

Wystarczy pomyśleć o przypadkach użycia dla oczekujących intencji, takich jak (intencje nadawania, alarmy planowania), a dokumentacja stanie się jaśniejsza i znacząca.

 45
Author: Samuh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 00:55:45

W moim przypadku żadna z powyższych odpowiedzi ani oficjalna dokumentacja google nie pomogła mi chwycić pojęcia klasy PendingIntent.

I wtedy znalazłem ten film, Google I / O 2013, poza niebieską kropką sesja . W tym filmie były googler Jaikumar Ganesh wyjaśnia, czym jest PendingIntent i to właśnie dało mi szerszy obraz tego.

Poniżej jest tylko transkrypcja powyższego Filmu (z 15:24).

Więc co jest w toku intencja?

Jest to token, który proces aplikacji przekaże procesowi lokalizacji, a proces lokalizacji wykorzysta go do wybudzenia aplikacji, gdy wydarzy się interesujące wydarzenie. Oznacza to, że aplikacja w tle nie musi być zawsze uruchomiona. Kiedy stanie się coś interesującego, obudzimy Cię. To oszczędza dużo baterii.

Wyjaśnienie to staje się bardziej jasne dzięki temu fragmentowi kodu (który jest zawarty w slajd sesji).

PendingIntent mIntent = PendingIntent.getService(...);

mLocationClient.requestLocationUpdates(locationRequest, mIntent);

public void onHandleIntent(Intent intent) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}
 30
Author: 김준호,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-26 10:03:08

Dlaczego PendingIntent jest wymagany ? myślałem jak

  1. dlaczego sama aplikacja odbierająca nie może utworzyć Intent lub
  2. dlaczego nie możemy użyć prostej Intent do tego samego celu.

E. g.Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

Jeśli wyślę bluetoothIntent do innej aplikacji, która nie ma uprawnień android.permission.BLUETOOTH_ADMIN, Ta aplikacja odbierająca nie może włączyć Bluetooth z startActivity(bluetoothIntent).

Ograniczenie pokonuje się za pomocą PendingIntent. Z PendingIntent otrzymującym wniosek, nie trzeba mieć android.permission.BLUETOOTH_ADMIN do włączenia Bluetooth. źródło .

 22
Author: Kiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 08:13:52

Intencja oczekująca to intencja, która rozpocznie się w pewnym momencie w przyszłości. Normalne intencje zaczynają się natychmiast po przekazaniu do startActivity(Intent) LUB StartService(Intent).

 16
Author: Arun P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 07:32:00

Przyszłą intencję, z której mogą korzystać inne aplikacje.
A oto przykład tworzenia:

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);
 13
Author: WhereDatApp.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 13:22:41

ANALOGIA TAXI

Intent

Intencje są zwykle używane do uruchamiania usług. Na przykład:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);
To tak, jak kiedy dzwonisz po taksówkę:]}
Myself = CurrentClass
Taxi Driver = ServiceClass

Intencja Oczekująca

Będziesz musiał użyć czegoś takiego:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

Teraz ta strona trzecia uruchomi usługę działającą w Twoim imieniu. Prawdziwą analogią jest Uber lub Lyft, którzy są obie firmy taksówkowe.

Wyślij prośbę o przejazd do Uber / Lyft. Oni następnie zadzwoni do jednego z kierowców w Twoim imieniu.

Dlatego:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass
 10
Author: Akshayraj Kore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-06 13:45:42

PendingIntent to token, który przekazujesz innej aplikacji (np. menedżerowi powiadomień, menedżerowi alarmów lub innym aplikacjom innych firm), który umożliwia tej drugiej aplikacji użycie uprawnień aplikacji do wykonania predefiniowanego fragmentu kodu. Aby wykonać transmisję za pośrednictwem oczekującego intentu, Pobierz PendingIntent za pomocą PendingIntent.getBroadcast(). Aby wykonać czynność za pośrednictwem intencji oczekującej, użytkownik otrzymuje tę czynność za pośrednictwem PendingIntent.getActivity ().

 9
Author: srinu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-31 06:16:33

Co To jest intencja?

Intencja to specyficzne polecenie w systemie Android, które pozwala wysłać polecenie do systemu operacyjnego Android, aby zrobić coś konkretnego. Pomyśl o tym jak o akcji, która musi się odbyć. Istnieje wiele czynności, które można wykonać, takich jak wysłanie wiadomości e-mail lub dołączenie zdjęcia do wiadomości e-mail, a nawet uruchomienie aplikacji. Logiczny przepływ pracy tworzenia intencji jest zwykle następujący: a. Utwórz intencję b. Dodaj opcje intencji - > np. do jakiego rodzaju intencji wysyłamy system operacyjny lub wszelkie atrybuty związane z intencją, takie jak ciąg tekstowy lub coś przekazywane wraz z intencją C. Uruchom intencję

Przykład z Prawdziwego Życia: powiedzmy, że budzę się rano i "zamierzam" iść do toalety. Najpierw będę musiał pomyśleć o pójściu do toalety, ale to tak naprawdę nie doprowadzi mnie do toalety. Potem będę musiał powiedzieć mojemu mózgowi, żeby najpierw wstał z łóżka, potem poszedł do toalety, a potem wypuścił, potem umył ręce, potem poszedł i wytarł moje ręce. Kiedy już wiem, dokąd zmierzam, wysyłam rozkaz, by zacząć i moje ciało podejmuje działania.

Co czeka na intencje?

Kontynuując przykład z prawdziwego życia, powiedzmy, że chcę wziąć prysznic, ale chcę wziąć prysznic po umyciu zębów i zjedzeniu śniadania. Więc wiem, że nie będę brać prysznica przed co najmniej 30-40 minut. Wciąż mam w głowie, że muszę przygotować ubrania, a następnie wejść po schodach z powrotem do łazienki, a następnie rozebrać się, a następnie wziąć prysznic. Jednak nie będzie to zdarzają się do 30-40 minut minęło. Mam zamiar wziąć prysznic. Trwa 30-40 minut.

To jest praktycznie różnica między intencją oczekującą a intencją regularną. Regularne intencje mogą być tworzone bez intencji oczekującej, jednak aby utworzyć intencję oczekującą, musisz najpierw mieć regularną konfigurację intencji.

 7
Author: Narendra Motwani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-01 05:45:46

W prostym języku,
1. Opis zamierzonego i docelowego działania do wykonania. Najpierw musisz utworzyć intencję, a następnie przekazać określoną klasę Javy, którą chcesz wykonać, do intencji.
2. Możesz wywołać te klasy java, które są twoją klasą działania grupowego przez PendingIntent.getActivity, PendingIntent.getActivities( Context, int, Intent [], int), PendingIntent.getBroadcast (Context, int, Intent, int) i PendingIntent.getService(Context, int, Intent, int); Proszę. widzisz, że intencja, która pochodzi z kroku 1
3. Należy pamiętać that...By składając wniosek do innego wniosku, przyznajesz mu prawo do wykonania określonej operacji.

Tego się nauczyłem po długiej lekturze.

 4
Author: Omar Faroque Anik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 20:21:24

PendingIntent jest w zasadzie obiektem, który otacza Inny Intent obiekt. Następnie można go przekazać do aplikacji zagranicznej, gdzie przyznajesz tej aplikacji prawo do wykonania operacji, tzn. wykonać intencję, tak jakby została wykonana z procesu własnej aplikacji(takie same uprawnienia i tożsamość). Ze względów bezpieczeństwa należy zawsze przekazywać jawne intencje do PendingIntent, a nie dorozumiane.

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);
 2
Author: Gowtham Subramaniam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 05:35:59

Jak sama nazwa wskazuje .. PendingIntent

Możesz to zrobić po jakimś czasie . To działa jak inne intencje ..jest to sposób na przekazanie zadania innej aplikacji do wykonania w Twoim imieniu.

 1
Author: Xar E Ahmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-23 13:37:18

PendingIntent owija ogólną intencję tokenem, który dajesz zagranicznej aplikacji do wykonania za twoją zgodą. Dla np:

Powiadomienie aplikacji Muzyka nie może odtwarzać / wstrzymywać muzyki, jeśli nie dał PendingIntent aby wysłać broadcast, ponieważ aplikacja muzyka posiada READ_EXTERNAL_STORAGE uprawnienia, które aplikacja powiadomień Nie. Notification jest usługą systemową (więc jest to aplikacja zagraniczna).

 1
Author: Ashish Rawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 11:47:27

PendingIntent jest w zasadzie obiektem, który otacza inny obiekt intencyjny. Następnie można go przekazać do aplikacji zagranicznej, gdzie przyznajesz tej aplikacji prawo do wykonania operacji, tzn. wykonać intencję, tak jakby została wykonana z procesu własnej aplikacji(takie same uprawnienia i tożsamość). Dając PendingIntent innej aplikacji, przyznajesz jej prawo do wykonania operacji, którą podałeś tak, jakby inna aplikacja była sobą (z tymi samymi uprawnieniami i tożsamość).

 1
Author: Sharanjeet Kaur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-14 06:50:22

A Intencja oczekująca określa działanie do podjęcia w przyszłości. Pozwala przekazać przyszłą intencję innej aplikacji i zezwolić tej aplikacji na wykonanie tej intencji tak, jakby miała te same uprawnienia, co aplikacja, niezależnie od tego, czy aplikacja jest nadal w pobliżu, gdy intencja jest ostatecznie wywołana.

Jest to token, który przekazujesz zagranicznej aplikacji, która pozwala zagranicznej aplikacji użyć uprawnień Twojej aplikacji do wykonania predefiniowanego kawałka kod.

Jeśli nadasz zagranicznej aplikacji intencję, a ta aplikacja wyśle / nada intencję, którą podałeś, wykona intencję z własnymi uprawnieniami. Ale jeśli zamiast tego nadasz aplikacji zagranicznej intencję oczekującą, którą utworzyłeś za pomocą własnego pozwolenia, aplikacja ta wykona zawarty intencję za pomocą pozwolenia Twojej aplikacji.

Aby wykonać transmisję poprzez PendingIntent, uzyskaj PendingIntent przez PendingIntent.getBroadcast(). Aby wykonać aktywność za pośrednictwem intencji oczekującej aktywność otrzymasz za pośrednictwem PendingIntent.getActivity ().

Jest to działanie intencyjne, które chcesz wykonać, ale w późniejszym czasie. Pomyśl o tym, jak umieścić intencję na lodzie. Powodem, dla którego jest to potrzebne, jest to, że intencja musi zostać utworzona i uruchomiona z ważnego kontekstu w aplikacji, ale są pewne przypadki, w których jeden z nich nie jest dostępny w momencie, w którym chcesz uruchomić akcję, ponieważ technicznie znajdujesz się poza kontekstem aplikacji (Dwa wspólne przykładami są uruchamianie aktywności z powiadomienia lub BroadcastReceiver.

Tworząc PendingIntent, którego chcesz użyć do uruchomienia, powiedzmy, aktywności, gdy masz do tego kontekst (z wnętrza innej aktywności lub usługi), możesz przekazać ten obiekt do czegoś zewnętrznego, aby mógł uruchomić część twojej aplikacji w Twoim imieniu.

PendingIntent umożliwia działanie aplikacji nawet po zakończeniu procesu. Ważne jest, aby pamiętać, że nawet po zabiciu aplikacji, która utworzyła PendingIntent, ta Intencja może nadal działać. Opis działania intencyjnego i docelowego do wykonania z nim. Instancje tej klasy są tworzone za pomocą getActivity( Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService (Context, int, Intent, int); zwracany obiekt może być przekazany innym aplikacjom, aby mogły one wykonać akcję opisaną w Twoim imieniu w późniejszym czasie.

Dając PendingIntent do innej aplikacji przyznajesz jej prawo do wykonania operacji, którą określiłeś tak, jakby inna aplikacja była sobą (z tymi samymi uprawnieniami i tożsamością). W związku z tym powinieneś uważać na sposób budowania PendingIntent: często, na przykład, podstawowa Intencja, którą podasz, będzie miała nazwę komponentu jawnie ustawioną na jeden z twoich własnych komponentów, aby upewnić się, że zostanie on ostatecznie wysłany tam i nigdzie indziej.

Sam PendingIntent jest po prostu odniesieniem do tokena utrzymywany przez system opisujący oryginalne dane użyte do ich pobrania. Oznacza to, że nawet jeśli proces posiadającej aplikację zostanie zabity, Sam PendingIntent pozostanie użyteczny z innych procesów, które zostały mu przekazane. Jeśli później tworząca aplikacja ponownie pobierze ten sam rodzaj PendingIntent (ta sama operacja, ta sama akcja Intent, dane, kategorie i komponenty oraz te same flagi), otrzyma PendingIntent reprezentujący ten sam token, jeśli jest on nadal ważny i może w ten sposób wywołaj cancel (), aby ją usunąć.

 0
Author: vikseln,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-23 12:51:15

Intencja oczekująca jest intencją, która udziela wszelkiej zgody innej aplikacji na wykonanie określonej pracy. Gdy główna aktywność zostanie zniszczona, Android OS odbiera z niego pozwolenie.

 0
Author: Neimer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-12 15:29:50

PendingIntent jest opakowaniem intencji. Zagraniczna aplikacja, która otrzymuje PendingIntent, nie zna treści intencji, która jest owinięta przez PendingIntent. Misją aplikacji zagranicznej jest odesłanie intencji właściciela, gdy spełnione są pewne warunki (na przykład: alarm z harmonogramem lub powiadomienie z kliknięciem...). Warunki są podane przez właściciela, ale przetwarzane przez aplikację zagraniczną (na przykład: alarm, powiadomienie).

Jeśli aplikacja zagraniczna została wysłana do Twojej aplikacji, oznacza to, że aplikacja zagraniczna wiedzieć o treści intencji. a zagraniczna aplikacja podejmuje decyzję o wysłaniu intencji, a następnie Twoja aplikacja musi przetworzyć intencję, aby spełnić pewne warunki, które Twoja aplikacja uzyska zasób wydajności systemu.

 0
Author: Rathaur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 05:21:31