Cześć wszystkim,
zastanawiam się nad implementacją jednego problemu. Piszę aplikację, która powinna funkcjonować przez dane pakietowe, ale w przypadku braku internetu, podstawowe funkcjonalności powinny być wysyłane za pomocą smsów.
I teraz rozważam kilka różnych przypadków, jednym z nich jest brak internetu podczas logowania. Jeśli użytkownik się loguje bez internetu, to zabrać jego dane i trzymać do momentu aż ten internet uzyska.
No. I teraz pytanie - jak to zrobić.
Wstępnie zaimplementowałem to tak:
Override
public int onStartCommand(Intent intent, int flags, int startId) {
DvLogs.v(TAG, "registerService loaded");
registerReceiver(connectionStatusReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(connectionStatusReceiver);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public BroadcastReceiver connectionStatusReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
DvLogs.i(TAG, "Network states:\nnoConnectivity "+noConnectivity+"\nreason: "+reason);
if(!noConnectivity) registerUser();
}
};
Mówiąc krótko: serwis który przez cały czas patrzy jak wygląda stan internetów. I dalej oczywiście logika logowania, ale to już pal licho.
I jak user się już zaloguje to przy starcie aplikacji ignoruję cały ten cyrk z serwisem i po prostu go nie uruchamiam.
Jednak... mam wrażenie, że to rozwiązanie jest bardzo koślawe. Dobrze czuję?
Nie do końca to działa, ale możliwe że słabo to zaimplementowałem - pracuję po części na cudzym kodzie i nie do końca widzę wszystkie zależności.
Jeśli jednak moje rozwiązanie jest typowym "prawą ręką w lewe ucho" - jak powinienem to zrobić?
Z góry dzięki za pomoc.