L'esperimento che faccio adesso dovrebbe essere risolutivo.
Far passare molto tempo fra una comparsa e l'altra dell'attività Form.
In questo tempo, in cui è stata innescata una procedura start, manipolare il cellulare in vario modo.
Fare successivamente una procedura di stop, a una considerevole distanza dalla procedura di Start, verificando sempre il Context.
Vado... ci provo.
Tempo impostato a 2 minuti.
Avvio lo Start...
Faccio un po' di manovre e poi avvio lo Stop. Vediamo se appare la Form...
Ecco, lo stop ha funzionato, ma non avendo rilevato il codice del Context inizialmente non so se sia lo stesso codice nello Start e nello Stop.
Ripeto, annotando i codici dei Context.
07-03 17:22:59.307: E/CONTESTO START(2593): android.app.Application@423c10a8 07-03 17:23:55.632: E/CONTESTO STOP(3212): android.app.Application@423c8d88Bene, i codici dei Context sono differenti, eppure lo stop ha funzionato lo stesso: siamo ben oltre i 2 minuti e l'attività Form non si è vista.
Ancora:
07-03 17:36:54.071: E/CONTESTO START(4041): android.app.Application@423c5c80 07-03 17:37:32.098: E/CONTESTO STOP(4183): android.app.Application@423c10a0che ha funzionato.
Ora intervento per la cancellazione a quasi 2 minuti, col cronometro...
07-03 18:31:28.456: E/CONTESTO START(10875): android.app.Application@423c3ee0 07-03 18:32:51.447: E/CONTESTO STOP(11471): android.app.Application@423c1f88Credo che il funzionamento sia abbastanza sicuro...
Ora dobbiamo far apparire lo status.
Creo una funzione CheckStatus nel Service...
Tutto fatto! Sto sperimentando, ora.
Ecco il codice del Service:
public class Timer extends Service { @Override public void onCreate(){ Log.d("SERVICE","ONCREATE"); } @Override public void onDestroy(){ super.onDestroy(); Log.d("SERVICE","ONDESTROY"); } IBinder mBinder=new LocalBinder(); @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return mBinder; } public class LocalBinder extends Binder{ Timer getService(){ return Timer.this; } } public void StartTime(){ Log.e("CONTESTO START",getApplicationContext()+""); Intent intent=new Intent(getApplicationContext(),Form.class); PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0); AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+120*1000, pendingIntent); } public void StopTime(){ Log.e("CONTESTO STOP",getApplicationContext()+""); Intent intent=new Intent(getApplicationContext(),Form.class); PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0); AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(pendingIntent); if(pendingIntent!=null)pendingIntent.cancel(); } public boolean AlarmOn(){ Intent intent=new Intent(getApplicationContext(),Form.class); boolean alarmUp=(PendingIntent.getActivity(getApplicationContext(),0,intent,PendingIntent.FLAG_NO_CREATE)!=null); return alarmUp; } }...e speriamo che funzioni!
Nessun commento:
Posta un commento