Skocz do zawartości
oriechmar

aplikacja, która działa nawet po jej wyłączeniu (systemowa)

    Rekomendowane odpowiedzi

    To ja jeszcze dopytam:

     

    Aplikacja, którą użytkownik raz uruchamia, ustawia interwał czasowy (np. 1 na dzień), wciska button start i tyle, aplikacja się zamyka. Następnie co ten określony czas użytkownik dostaje pusha. Co się najlepiej do tego nada? 

    Udostępnij tę odpowiedź


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

    @@mariuszs338

    To powinien być osobny temat. 

     

    Ale alarm manager lub jakieś push notifications (firebase np)

    • Lubię to! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @@mariuszs338

    To powinien być osobny temat. 

     

    Ale alarm manager lub jakieś push notifications (firebase np)

     

    ok, na przyszłość będzie, moje pytanie tak podobne do tego, że myślałem, że będzie ok ;p

     

    tak czy siak alarm manager powinien starczyć, w firebase nie widzę nigdzie opcji cyklicznego wysyłania pushy

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Panowie, to oczywiście moja wina, bo nie sprecyzowałem zbyt dokładnie pytania, za co oczywiście przepraszam :(

    Nie mniej jednak temat jest cały czas ten sam, czyli aplikacja, która działa nawet po jej zamknięciu.

     

    Generalnie to co napisał "panryz" z tym JobSchedulerem, może być ciekawe, właśnie o tym czytam. Google nie zaleca stosowania TimerTaska (ja go obecnie wykorzystuję

    i stwierdzam że zachowuje się nie przewidywalnie :( odstępy uruchomienia są różne, być może przy dłuższym uruchomieniu pojawiają się problemy z wydajnością).

     

    Również AlarmManager jest uznany za technologię przestarzałą.

     

    Martwi mnie jednak tylko to że JobScheduler nie będzie działał na starszych androidach np. 4.2.2, ale to muszę jeszcze doczytać

     

    Jeden problem rozwiązałem, otóż aplikacja nie działała ponieważ pod buttonem zamykania aplikacji miałem taki oto kod:

    // **** zamknięcie aplikacji
            moImgBtnClose.setOnClickListener(new OnClickListener(){
            	
            	@Override
            	public void onClick(View v){
            		finish();
            		System.exit(0);
            	}
            });
    

    Wystarczyło zaremować:

    System.exit(0);
    

    i nagle wszystko działa po zamknięciu aplikacji. Trochę nasiedziałem zanim na to wpadłem, ale cóż, początki nigdy nie są łatwe :(

    Niestety jak wyżej wspomniałem, po jakimś czasie, nie wiem, może kilkanaście minut TimerTask zaczyna płatać figle i uruchamia się

    w różnych odstępach czasowych, nie takich jakie ma zadane z poziomu aplikacji.

     

    Pozdrawiam

    Marcin

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Martwi mnie jednak tylko to że JobScheduler nie będzie działał na starszych androidach np. 4.2.2, ale to muszę jeszcze doczytać

     

    No to spore ograniczenie, nie ma tego w żadnej bibliotece supportowej a klepanie apki tylko od api 21+ jest w mojej opinii mocno średnie

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    No właśnie też wyczytałem (przynajmniej na razie nie natrafiłem na nic innego), że JobScheduler wspiera tylko andka LilliPop (5.0+), fatalnie,

    ja mam 4.2.2, u mnie wszyscy znajomi mają max 4.4.4, i coś mi się zdaje że większość ludzi ma takie stare fony :(

    Chyba zerknę jednak na tego AlarmManagera :(

    Udostępnij tę odpowiedź


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

    Ale nie jest powiedziane ze nie mozesz użyć tego i tego. Możesz w kodzie sprawdzić jaka jest wersja systemu i skorzystać z odpowiedniego komponentu.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Ale nie jest powiedziane ze nie mozesz użyć tego i tego. Możesz w kodzie sprawdzić jaka jest wersja systemu i skorzystać z odpowiedniego komponentu.

     

    To z pewnością dobry pomysł i pewnie zrobię tak jak sugerujesz :)

     

    Mam niestety inny problem, otóż znalazłem wolną chwilę i tak czytam i przeglądam różne przykłady ale każdy z nich pokazuje wykorzystanie alarmManagera w

    połączeniu z BroadcastReceiver lub z Services lub też z oboma tymi komponentami.

    Czy alarmManager samodzielnie nie może funkcjonować w np. Activity?

    A może jest gdzieś jakiś dobry tutorial odnośnie tego komponentu tylko ja po prostu nie mogę go znaleźć?

    [Dodano: 19 lipiec 2016 - 23:54]

    Znalazłem super przykład z takiej strony: http://stacktips.com/tutorials/android/repeat-alarm-example-in-android

    Przerobiłem go do własnych potrzeb i działa bez zarzutu, doputy do puki nie zapodam mu klasy activity.

    Otóż wywala się na: cursor.

     

    Moja klasa z BroadcastReceiver po przerobieniu wygląda tak (wywołuję tu metodę: msg() z klasy Activity) :

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    public class MyBroadcast extends BroadcastReceiver {
    	
    	EkranGlowny EG;
    	
    	@Override
        public void onReceive(Context context, Intent intent) {
    		
    			Toast.makeText(context, "I'm running", Toast.LENGTH_LONG).show();
    		
    			EG  = new EkranGlowny();
    			EG.msg();
        }
    }
    

    Metoda msg() w klasie Activity wygląda tak:

    public void msg(){
        	int zm_status_sms = 0;	
    		Uri uriSMSURI = Uri.parse("content://sms/inbox");
    		Cursor cur = getContentResolver().query(uriSMSURI, null, "read = 0", null, null);
    		
    		while (cur.moveToNext()){
    			zm_status_sms = 1;	
     		}
     		if(zm_status_sms > 0) {
     			Toast.makeText(getApplicationContext(), "NIE PRZECZYTANE:", Toast.LENGTH_LONG).show();
     			..... inne instrukcje, nie powodujące błędów
            }
            else{
             	Toast.makeText(getApplicationContext(), "PRZECZYTANE", Toast.LENGTH_LONG).show();
            }
        }
    

    cała aplikacja wywala się w momencie dojścia do linii:

    Cursor cur = getContentResolver().query(uriSMSURI, null, "read = 0", null, null);
    

    Co robię nie tak? z logów wynika że problemem jest : getContentResolver

    Jak można to inaczej zadeklarować żeby BroadcastReceiver się nie wysypywał? jest na to jakiś sposób?

     

    Pozdrawiam

    Marcin

    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