Ovviamente, prima di farlo con il TTS, meglio usare dei semplici Toast o dei Log in LogCat.
Creiamo un'app che mostri un Toast ogni 30 secondi.
Provo a creare un AlarmManager secondo quel poco che ricordo, certamente sbagliando...
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AlarmManager alarmManager=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,)...che è incompleto: il parametro successivo presente sul tutorial è SystemClock.elapsedRealtime() sommato a qualcosa...
Voglio vedere, criticamente, cosa è questo SystemClock.elapsedRealtime().
Dunque "commentizzo" il codice incompleto di cui sopra e me lo metto in LogCat.
Log.v("SystemClock.elapsedRealtime",""+SystemClock.elapsedRealtime());
/*AlarmManager alarmManager=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,)*/
E vediamo...Ho ottenuto questo valore:
06-18 01:08:21.163: V/SystemClock.elapsedRealtime(19020): 8482000Sospetto che si tratti di un valore in millisecondi: lo converto in ore...
8482 secondi,
141 minuti e 22 secondi
2 ore, 21 minuti e 22 secondi.
Dovrebbe essere il tempo passato dall'accensione del cellulare...
Ora per fare una prova lo spengo e lo riaccendo, e vediamo...
06-18 01:34:22.074: V/SystemClock.elapsedRealtime(9256): 661888conversione: 11 min, 1 sec, 888 msec.
Ci sta!
Ora, mentre si esegue l'App viene stabilito un tempo passato dall'accensione del cellulare e viene stabilito che dopo un tot di millisecondi si deve verificare un dato evento.
Riprendiamo il codice...
Eccolo, completato con intent e pendingIntent:
public class MainActivity extends Activity { Button button; Intent intent; PendingIntent pendingIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent=new Intent(this,Servizio2.class); pendingIntent=PendingIntent.getService(this, 0, intent, 0); AlarmManager alarmManager=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime()+1000*60,pendingIntent); } }Vediamo se funziona: dovrebbe scattare il Toast evocato dal Service dopo 60 secondi.
E non scatta!
Ovviamente, mi pareva strano che non ci fosse un errore...
non ho registrato il Service sul Manifest!.
Non funziona nemmeno con il semplice startService(intent).
Rimedio...
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name="Servizio"
android:exported="true" />
<service android:name="Servizio2" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
Adesso vediamo...Ora il Toast appare, ma appare subito, non dopo il tempo voluto.
Provo con il LogCat...
Appare subito e dopo un tempo congruente con i 60 secondi. Perché?
Perché sono cretino io!. Avevo lasciato startService(intent), e quindi appariva subito grazie a questo!
Ora rifaccio tutto (dopo soli 10 secondi perché sembra che il tempo non passi mai). Sì! Funziona!
Nessun commento:
Posta un commento