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