» »

[Android] Izklop/Vklop vsak dan ob isti uri - problem

[Android] Izklop/Vklop vsak dan ob isti uri - problem

shadeX ::

V aplikaciji sem dodal možnost izklopa in vklopa aplikacije (servica) ob določeni uri. Videl sem da je za "cron" najboljša odločitev ALARM MANAGER API. Jaz moram samo izračunati na podlagi uporabnikove izbire kdaj se bo aplikacija izklopila in kdaj vklopila. Tako sem napisal nekaj vrstic kode, ki "potegne" nastavljen vklop in izklop v milisekundah. Aplikacija deluje vredu če sta vklop in izklop nastavljena za isti dan, naprimer: 15:00 in 20:00.

Če je izklop nastavljen na 22:00 zvečer in vklop ob 06:00 zjutraj je seveda logično da je datum vklopa že naslednji dan, tako sem tudi napisal algoritem, ker nebi bilo logično da bi bil datum izklopa npr: 26.04.2013 22:00 in datum vklopa 26.04.2013 ob 06:00, tako sem pa napisal da če je izklop večji od vklopa se to šteje že za naslednji dan.

Problem:

Izklop : 22:00
Vklop : 06:00 (naslednji dan)
Datum: 26.04.2013
Ker se na možnost uporabnika service zažene tudi ob zagonu telefona, ko se onCreate v servicu zažene, jaz zračunam trenutni datum. Ker želim da aplikacija med nastavljenim časom NE SME delovati, želim da se service ne zažene oz. se uniči če uporabnik vklopi telefon ravno v nastavljenem času. To deluje vredu če je uporabnik vklopil telefon med 22:00 in 23:59, ampak če uporabnik vklopi telefon med 00:00 in 05:59, se service ne bo izklopil ker ni v tistem časovnem dosegu ampak je načrtovan izklop za 22:00, 27.04.2013 in vklop 28.04.2013.

Upam da razumete kaj sem želel povedati, ker sem mogoče malo bolj zakomplicirano napisal. Vse kar pa hočem je da service ne deluje med nastavljenim časom (izklop/vklop), vsaki dan. Sem mogoče kaj zakompliciral stvar ali mi kaj manjka v kodi?

klemenSLO ::

kaj pa če zapis od 22:00 do 06:000 razbiješ na 2 ločena: od 22.00 do 23.59.59 ter od 00.00 do 06:00 ?
Life is not measured in minutes, but in MOMENTS...

shadeX ::

Ne vem kako misliš ampak to ni problem. Problem je ker ko se service zažene ( npr ob zagonu telefona ) in če je ura recimo čez 0:00, potem se šteje za vklop že za naslednji dan, ker kot datum potegnem ven kot današnji, tako da trenutna ura ne pade v tisti range med 22 in 06. Kakorkoli obrneš, ko se service zažene (po polnoči), izračunan vklop in izklop je današnji in ne včerajšnji ( kar pa bi moral biti ).

Ne vem če razumete kaj želim povedati..

Zgodovina sprememb…

  • spremenil: shadeX ()

klemenSLO ::

Če gledaš korake:
zagon servica ob bootu: (service je ON)dobiš timestamp, če je naslenji korak PRIŽGI, potem ga pač ugasneš, če pa je naslenji korak UGASNI, potem ga pustiš prižganega ?
Life is not measured in minutes, but in MOMENTS...

shadeX ::

1. Zagon servica ob bootu
2. Dobim trenutni čas
3. Ali je trenutni čas MED časom izklopa in vklopa.
4. Če je, IZKLOPI service
4.1 Če ni, pusti service da deluje, ampak ga ugasni ob naslednjem nastavljenim časom izklopa.

klemenSLO ::

v kakšni obliki (tip) imaš podane vse 3 spremenljivke? datetime?
Life is not measured in minutes, but in MOMENTS...

shadeX ::

"long" -> Milisekunde (since 1970), ker jih potrebuje AlarmManager (triggerAtMills)

klemenSLO ::

sicer ne programiram v javi. Teoretično bi ti mogl delat :)
kaj pa če ga 'zjebe' pogoj '3. Ali je trenutni čas MED časom izklopa in vklopa.' v smislu ko ti narediš boot ne dobi časa prejšnjega izklopa ampak ima samo naslenji vklop. Tako je ta pogoj pod točko 3 vedno False....
Life is not measured in minutes, but in MOMENTS...

shadeX ::

Ja sej to govorim. Pogoj 3 je false zato ker vedno dobim naslednji vklop/izklop. (Če je ura po polnoči)

shadeX ::

Nekaj sem napisal ampak pomoje je to bolj za silo. Sicer deluje zaenkrat.
Ko se service upali, najprej preveri včerajšni čas med vklopom/izklopom. Če je v dosegu ,metoda vrne "true". Če ni v dosegu, metoda preveri še naslednji dan ob istih urah. Če je trenutna ura med vklopom/izklopom, potem vrne true, če ne vrne false.


public boolean isCurrentTimeBetween_enableDisable() {
		
		long disable_Minus24 = disableTime-repeating_24h; // - 1 dan
		long enable_Minus24 = enableTime-repeating_24h; // - 1 dan
		
                long sysTime = System.currentTimeMillis(); // trenutni čas
		
                long disable_Plus24 = disable_Minus24+repeating_24h; //+1 dan
		long enable_Plus24 = enable_Minus24+repeating_24h; // +1 dan
		
		
		if((sysTime > disable_Minus24 && sysTime < enable_Minus24))
		{
			return true;
			
		}		

		
		 if((sysTime > disable_Plus24 && sysTime < enable_Plus24)) {
			
			return true;
			
		}
		
		return false;
	}

mallard ::

Če prav razumem, imaš tri podatke:
DATUM (datum nastavitve)
IZKLOP (čas izklopa)
VKLOP (čas vklopa)

Dodaj še zastavico, ki jo nastaviš glede na to, če datum vklopa pade na naslednji dan.

Ob nastavljanju:
- IZKLOP > VKLOP --> dvigni zastavico

Ob preverjanju:
- trenutni datum > DATUM
    - zastavica je dvignjena
        - trenutni čas < VKLOP  --> izklopi

- trenutni datum == DATUM
    - zastavica je dvignjena 
        - trenutni čas > IZKLOP --> izklopi
    - zastavica je spuščena
        - trenutni čas > IZKLOP in trenutni čas < VKLOP  --> izklopi

--> pusti teči


Mal čudno sem tole napisal, ni se mi dal pisat psevdokode :) Upam, da boš dojel (in da sem te prav razumel).

Zgodovina sprememb…

  • spremenilo: mallard ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Casovno stikalo za bojler

Oddelek: Elektrotehnika in elektronika
437011 (5919) dreta
»

Windows 10 izklop posodobitev

Oddelek: Pomoč in nasveti
82550 (2248) crniangeo
»

Luč na senzor - menjava releja

Oddelek: Elektrotehnika in elektronika
183374 (2849) Assass1n
»

Kako ročno poiskati naslov IP kamere?

Oddelek: Omrežja in internet
153700 (3344) ToniT
»

Šifriranje vsebine Win 7

Oddelek: Pomoč in nasveti
191344 (930) energetik

Več podobnih tem