JavascriptProva

mercoledì 15 giugno 2016

AlarmManager ELAPSED_TIME_WAKEUP

Ho acquisito sufficiente dimestichezza con il binding di un Service nell'ambito della stessa App.
Ora, giusto per non perdere di vista l'obiettivo, voglio creare nuovamente l'AlarmManager.

Non mi servirà che l'AlarmManager faccia il binding a un service, l'importante è che lo attivi e faccia il task che deve fare, quindi lo stoppi (o si stoppi da solo) in attesa della prossima chiamata.

Andiamo a ripassare AlarmManager...

Partiamo subito. Cancello il tutto...
Mi ricordo che ci sono due tipi di AlarmManager...

AlarmManager non si istanzia da una classe, ma la sintassi è quella di un getSystemService:
 alarmManager=(AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Ora che abbiamo un alarmManager di tipo AlarmManager, che ci facciamo?
Ci vuole un Intent che venga inglobato da un PendingIntent: si tratta di un Intent esplicito che sembra far riferimento a un Service...

Ora ci metto allora il mio Service, con il solo metodo onStartCommand, e vediamo che succede...

Devo dichiarare la variabile PendingIntent...

 AlarmManager alarmManager;
 PendingIntent pendingIntent;


Ora si deve creare l'Intent esplicito e "inglobarlo" nel PendingIntent.
Devo vedere la sintassi di questo "inglobamento", tanto più che mentre nel tutorial che sto seguendo viene usato un broadcast receiver, io sto usando un service.
  Intent intent =new Intent(this,Servizio.class);
  pendingIntent.getService(this, 1, intent, 0);
A questo punto si "impacchetta" tutto in AlarmManager, dando le impostazioni. Facciamo che ogni 30 secondi viene richiamato il Service... si usa il metodo set di AlarmManager.
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+60*1000, pendingIntent);
Ci provo: ogni 60 secondi dovrebbe apparire un Toast con scritto "VIENE ESEGUITO IL METODO DEL SERVICE". Mi sviscererò successivamente i parametri del metodo set...

Non funziona!

Trovato: un banale errore di sintassi che, corretto, lo fa funzionare egregiamente.
Ecco i codici:

MainActivity:
public class MainActivity extends Activity {

 
 PendingIntent pendingIntent;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  AlarmManager alarmManager=(AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
  Intent intent=new Intent(this,Servizio.class);
  pendingIntent=PendingIntent.getService(this,0,intent,0);
  
  alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
          5*1000,
          5 * 1000, pendingIntent);
      
  
 }
}


Servizio:
public class Servizio extends Service{

 @Override
 public IBinder onBind(Intent intent) {
  return null;
 }
 
 @Override
 public int onStartCommand(Intent intent, int flags, int startUI){
  Log.e("N'GUL", "A MAMMETE");
  
  return startUI;
  
 }
  
}

Nessun commento:

Posta un commento