Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
| Autor | Správa |
|---|
Registrovaný: 14.04.09 Prihlásený: 10.08.21 Príspevky: 97 Témy: 15 | 15 |
Zdravím, potreboval by som trošku poradiť s jednou časťou appky, na ktorej pracujem. Je to moja prvá appka takže som fakt len začiatočník. Ide o toto: appka zatiaľ funguje tak, že sa na začiatku treba lognúť, login údaje sa overia na servery a ak sedia užívateľa to posune na main aktivitu, kde sa mu zobrazujú nejaké údaje z db, to asi ale nieje také podstatné. Potreboval by som spraviť nejaký background service niečo, čo by sa spustilo po logine a bežalo v pozadí aj ak by bola appka minimalizovaná. Tá background činnosť by mala robiť nasledovné: skontrolovať či je má telefón prístup k netu a ak áno každých x minút pustiť nejaký php script, ktorý bude uložení na servery, ak nie tak sa ten background proces zastaví. Je možné také niečo spraviť? Za každú radu vďaka 
|
|
|
Preco chces pustat php script aj ked je appka minimalizovana? Nebolo by lepsie pozriet sa na funkcie onResume() a onPause(), v ktorych by si startoval a vypinal to checkovanie? Toto pouzivam ja na checkovanie pripojenia. Mam na to celu triedu, lebo v nej mam este nejake ine veci ale tebe staci tato funkcia Kód: public class ConnectionDetector { private Context mContext; private ConnectivityManager connectivity; public ConnectionDetector(Context context) { mContext = context; }
public boolean isInternetAvailable() { connectivity = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) return true; } } } return false; } } Si si isty, ze to prihlasenie je bezpecne? Odosielas sifrovane udaje a nie plain heslo? Edit: pytam sa preto, ze robit zbytocne service, ktory bude stale zobudzat mobil nie je dobry napad. Vydrz baterky padne o XY%. Ja ked som robil prvy widget, este pre android 2.2, tak som tiez zbytocne pouzil serivice a divil som sa, ze mobil nic nevydrzal. Skoro vzdy je aj lepsie riesenie a service treba pouzit len vtedy, ak aplikacia ma notifikovat uzivatela o niecom aj ked je mobil idle.
|
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... |
Riešiť to Servicom fakt nevidím potrebné a ako bolo spomenuté zbytočne by ti to zožralo batériu. Ale pre info by si potreboval urobiť triedu, ktorá bude extend na Service, tam potom preťažiť onStartCommand metódu kde napíšeš vlákno ktoré bude vykonávať čo chceš a budeš ho uspávať. Ďalej treba nastaviť intent filter a potom nejaký receiver, aby si mal kde tie tvoje hodnoty počúvať. Ktomu kódu ešte do manifestu : Kód: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 14.04.09 Prihlásený: 10.08.21 Príspevky: 97 Témy: 15 | 15 |
okej, ak service nieje ideálne riešenie, aký je teda najlepší spôsob ako by sa to dalo spraviť? Kamahl: áno, heslo je šifrované a vďaka za ten kód 
|
|
|
Ako som uz hovoril, ak nepotrebujes aby telefon zacal notifikovat uzivatela aj ked je idle, urob to tak, ze v onResume() zapni checkovanie dat a v onPause() ho zas vypni
|
|
Registrovaný: 14.04.09 Prihlásený: 10.08.21 Príspevky: 97 Témy: 15 | 15 |
nepotrebujem, žeby užívateľ dostával notifikácie, dôležité je, žeby to bežalo v backgrounde každých x min aj, keď bude appka minimalizovaná ak je to možné spraviť cez onResume() a onPause() tak super, a ospravedlňujem sa za také otázky ale fakt s tým len začínam a radšej si chcem byť istý, že to je takto možné spraviť, než aby som sa s tým babral neviem ako dlho a potom zistil, že sa to tak nedá
|
|
|
Ale preco by to malo bezat aj ked je appka minimalizovana? Aky to ma zmysel? Prave na to je service a prave ten ti vymlati bateriu. Taku appku nikto nechce
|
|
Registrovaný: 14.04.09 Prihlásený: 10.08.21 Príspevky: 97 Témy: 15 | 15 |
pretože je dôležité, aby to po spustení appky pripočítavalo užívateľovi povedzme nejaké kredity každých x min pod podmienkou, že bude online, takže jediný spôsob ako to urobiť je cez service? btw. cez alarm - receiver by to nešlo, alarm by volal každých x min receiver, ktorý by púšťal ten script
|
|
|
Stale nerozumiem preco by to malo bezat aj ked je mobil idle. Ked otvoris appku, posli request, zisti kolko casu ubehlo od posledneho requestu a vypocitaj pocet kreditov, ktore ma dostat. Poriadne nad tym popremyslaj, vzdy je aj jendoduchsi sposob ako nieco naprogramovat.
|
|
Registrovaný: 14.04.09 Prihlásený: 10.08.21 Príspevky: 97 Témy: 15 | 15 |
pretože to má prirátavať iba ak je užívateľ online a ak dobre chápem tvoj príklad tak tam by to fungovalo tak, že užívateľ zapne appku zapíše sa čas, a keď užívateľ zapne appku zas vypočíta sa koľko kreditov by mal dostať za časový interval od kedy zapol appku prvý krát do druhého zapnutia, chápem to správne? rozmýšľam nad tým už dlhšie ale zatiaľ som neprišiel na iný spôsob ako by to bolo možné spraviť
|
|
|
co znamena ze je online? ze ma zapnutu appku? alebo ze je appka vypnuta ale mobil je pripojeny na net?
|
|
Registrovaný: 14.04.09 Prihlásený: 10.08.21 Príspevky: 97 Témy: 15 | 15 |
mobil je pripojený k netu
|
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... |
Nechcem ti kaziť ideály, ale takáto appka bude pre užívateľov asi nepríťažlivá. Ale ako som povedal hore, potrebuješ service a potom budeš potrebovať jeden BroadcastReceiver ten urobíš tak isto , teda tvoja trieda bude dediť zo servicu, preťažíš onStartCommand a onDestroy metódy. príklad niečo ako toto : http://stackoverflow.com/questions/3141 ... nnectivity alebo ak tak môj, čo sme robili v škole : Kód: public class RecievingService extends Service { public static String messageLabel = "moj.super.receiver"; private int _count = 0; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; }
private BroadcastReceiver _reciever; @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(getApplicationContext(), "Recieving starts", Toast.LENGTH_SHORT).show();
// create reciever _reciever = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //do something on recieved intent Toast.makeText(getApplicationContext(), "Recieved: " + _count, Toast.LENGTH_SHORT).show(); _count++; } }; registerReceiver(_reciever, new IntentFilter(RecievingService.messageLabel)); return super.onStartCommand(intent, flags, startId); }
@Override public void onDestroy() { unregisterReceiver(_reciever); Toast.makeText(getApplicationContext(), "Recieving ends", Toast.LENGTH_SHORT).show(); super.onDestroy(); } }
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 14.04.09 Prihlásený: 10.08.21 Príspevky: 97 Témy: 15 | 15 |
vďaka za odpoveď, ja sa ešte pokúsim porozmýšľať nad alternatívou
|
|
Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
|