Autore Topic: Operazioni programmate nel tempo, es. attivare modalità offline alle 01.00  (Letto 2473 volte)

Offline funcool

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid CM 7.1
  • Play Store ID:
    elcasa
  • Sistema operativo:
    Windows 8
Ciao a tutti, sono alle prime armi con android, vorrei creare un app abbastanza semplice e già presente in massa nel market, un app che mi attivi la modalità offline ad una certa ora e me la disattivi in un altra.. il codice per attivare la modalità offline l'ho copiato pari pari da qui DB: Android: Controlling Airplane Mode e funziona
Codice (Java): [Seleziona]
//check to see if it is enabled or not:
boolean isEnabled = Settings.System.getInt(
      context.getContentResolver(),
      Settings.System.AIRPLANE_MODE_ON, 0) == 1;

// toggle airplane mode
Settings.System.putInt(
      context.getContentResolver(),
      Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

// Post an intent to reload
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !isEnabled);
sendBroadcast(intent);

dovrò realizzare un activity per impostare gli orari ecc, per attivare e disattivare la modalità offline dovrò utilizzare un servizio con qualcosa di simile ad un timer, da quel che ho visto esistono vari modi

ScheduledExecutorService | Android Developers

AlarmManager | Android Developers

Handler | Android Developers

ora i miei dubbi sono:

1 - c'è qualcosa che manca o non ho capito in generale nell'app ?

2 - qual è il metodo migliore per compiere un'azione ad una certa ora ? tutti gli esempi che ho trovato riguardano soprattutto delay più che ore precise.. ho letto ad esempio nello ScheduledExecutorService che "All schedule methods accept relative delays and periods as arguments, not absolute times or dates. It is a simple matter to transform an absolute time represented as a Date to the required form."  ma volevo sapere se voi avete idea di quale sia il modo più corretto per farlo, cioè secondo voi cosa usare e se sono costretto a passare dalle date e orari ai ritardi

3 - è giusto impostare la modalità offline in quel modo? e ( diciamo bonus ) ho notato che certi riescono a disattivare certe cose e lasciarne attivate altre tipo 3g mms e telefonate, per caso avete idea di come si faccia ?

grazie mille in anticipo per qualunque aiuto ;-)
« Ultima modifica: 29 Ottobre 2011, 17:39:08 CEST da funcool »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Operazioni programmare nel tempo, es. attivare modalità offline alle 01.00
« Risposta #1 il: 26 Luglio 2011, 15:09:42 CEST »
+1
Non ho esperienza di Service, ma io direi che per eventi una tantum a cadenza giornaliera, l'ideale è l'AlarmManager.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline funcool

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid CM 7.1
  • Play Store ID:
    elcasa
  • Sistema operativo:
    Windows 8
Re:Operazioni programmare nel tempo, es. attivare modalità offline alle 01.00
« Risposta #2 il: 27 Luglio 2011, 21:12:16 CEST »
0
mm ok ci ho dato un'occhiata e praticamente dovrò fare un service che setta i 2 allarmi e far si che venga eseguito anche al boot del telefono visto che ogni volta spento gli allarmi si cancellano.. giusto ?

forse forse dovevo postare nella sezione Multithreading e servizi, scusate
« Ultima modifica: 27 Luglio 2011, 21:28:14 CEST da funcool »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Operazioni programmare nel tempo, es. attivare modalità offline alle 01.00
« Risposta #3 il: 27 Luglio 2011, 22:40:13 CEST »
+1
mm ok ci ho dato un'occhiata e praticamente dovrò fare un service che setta i 2 allarmi e far si che venga eseguito anche al boot del telefono visto che ogni volta spento gli allarmi si cancellano.. giusto ?

Per settare al boot dovrebbe bastare registrare l'activity come ricevente dell'intent "boot complete" (vado a memoria) e setti gli alarm.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline funcool

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid CM 7.1
  • Play Store ID:
    elcasa
  • Sistema operativo:
    Windows 8
Re:Operazioni programmare nel tempo, es. attivare modalità offline alle 01.00
« Risposta #4 il: 28 Agosto 2011, 19:33:01 CEST »
0
Codice (XML): [Seleziona]
<receiver android:name="MyStartupIntentReceiver">
        <intent-filter>

                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.HOME" />

        </intent-filter>
</receiver>

si, l'evento è BOOT_COMPLETED, con gli alarm ho fatto ( 2 su 2 grazie mille ! ) e sono a buon punto con l'app, però mi è sorto un altro dubbio..

io leggo da un file di testo le impostazioni dell'app, il codice per scrivere e leggere da file c'è e funziona ma:

sia un activity ( il main ) che un service ( che setta gli alarm ) devono leggere il file quindi, per non copiare il codice in entrambe le classi, pensavo di fare un service che legge da file e mi ritorna un record con le mie informazioni..

con le Activity se non sbaglio si usa lo startActivivityForResult() ma essendo questo un service come potrei fare ? tutto tramite il putExtra degli Intent ?
essendo più classi a chiedere la lettura dei file dovrei richiamare il chiamante facendo putExtra dei dati appena letti dal file.. mi sembra un po' macchinoso, che voi sappiate c'è di meglio ?
« Ultima modifica: 28 Agosto 2011, 20:30:41 CEST da funcool »

Offline funcool

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid CM 7.1
  • Play Store ID:
    elcasa
  • Sistema operativo:
    Windows 8
Re:Operazioni programmare nel tempo, es. attivare modalità offline alle 01.00
« Risposta #5 il: 29 Ottobre 2011, 17:36:54 CEST »
0
quella sui file di testo era gran vaneggiata... per le impostazioni ho usato le preference

ora però avrei una altra domanda sempre sugli alarm.. quando li imposto ?

questo è il mio codice che imposta gli allarmi:
Codice (Java): [Seleziona]
AlarmManager alMan = (AlarmManager)getSystemService(ALARM_SERVICE);
                                               
                Intent setIn = new Intent(myCont, a.class);    
       
                Intent clearIn = new Intent(myCont, b.class);
               
                // Create an IntentSender that will launch our service, to be scheduled
              // with the alarm manager.
               
                startAlarmSender = PendingIntent.getService(myCont,
                      0, setIn, 0);
                                               
                endAlarmSender = PendingIntent.getService(myCont,
                      0, clearIn, 0);
                 
               
                // delete old alarms
                alMan.cancel(startAlarmSender);
                alMan.cancel(endAlarmSender);
               
                // traffico un poco con i calendari

                alMan.set(AlarmManager.RTC_WAKEUP, startCal.getTimeInMillis() , startAlarmSender);
                alMan.set(AlarmManager.RTC_WAKEUP, endCal.getTimeInMillis() , endAlarmSender);
                       
                Toast.makeText(myCont, "ScheduleAlarm: Alarm Set", Toast.LENGTH_LONG).show();
               
                stopSelf();    

la mia app è composta da 2 activity, il main e la preference activity

al momento io imposto gli allarmi nell'onResume del main ( più precisamente nell'onResume chiamo un service che mi esegue questo codice ) solo che non è una cosa troppo sicura, ad esempio se qualcuno modifica le preference e poi preme il tasto home gli allarmi non vengono impostati.. se li impostassi nell' onPause() ?? sono sicuro che l' onPause() della mia  main activity venga sempre chiamato ? teoricamente si.. Activity | Android Developers ma posso fidarmi ? secondo le vostre esperienze e conoscenze, nella pratica è così ?

grazie in anticipo !
« Ultima modifica: 29 Ottobre 2011, 17:42:57 CEST da funcool »