Opto per un Service in foreground, che rimanga il fulcro di tutta l'applicazione.
Per crearlo, bisogna inserire nel metodo onCreate del Service un intent e un pendingintent, e quindi un oggetto Notification, che è quello che presenta la maggior novità.
Il costruttore è NotificationCompat.Builder(this).
A questo seguono setSmallIcon, setContentText, setContentTitle e setContentIntent.
Il primo fa riferimento a un'immagine, i successivi due a testo, e l'ultimo deve avere come parametro pendingIntent e quindi viene scritto il suo membro build().
Non è una nomenclatura tecnica, ma è efficace per ricordare.
Quindi si invoca startForeground con un numero identificativo che può essere anche 1, e la notifica per parametro.
Quindi la notifica ha bisogno del pendingIntent che ha bisogno dell'intent, e alla fine il metodo startForeground si serve della notifica.
Provo a scriverlo a memoria...
@Override public void onCreate(){ Intent intent=new Intent(this,MainActivity.class); PendingIntent pi=PendingIntent.getActivity(this, 0, intent, 0); Notification notification=new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.cornetta) .setContentTitle("CoachCall") .setContentText("Chiamate dal Coach") .setContentIntent(pi).build(); }Ci sono arrivato...
Con questo ho un Service che dovrebbe essere inattaccabile.
Ora, questo service deve essere innescato dall'apertura dell'Activity principale, e ciò si può fare mediante il binding, che è peraltro necessario per tutte le altre activities che debbano interagire con esso eseguendone le funzioni.
Secondo passaggio, quindi, è quello di effettuare il binding.
Solito schema: nell'activity creo le variabili...
TimerService mService; boolean mBound;quindi procedo...
@Override public void onStart(){ super.onStart(); Intent intent=new Intent(this,TimerService.class); bindService(intent,mConnection,Service.BIND_AUTO_CREATE); } @Override public void onStop(){ super.onStop(); if(mBound){ unbindService(mConnection); mBound=false; } } ServiceConnection mConnection=new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { LocalBinder bnd=(LocalBinder)service; mService=bnd.getService(); mBound=true; } @Override public void onServiceDisconnected(ComponentName name) { mBound=false; } };E su TimerService:
IBinder mBinder=new LocalBinder();e poi...
@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return mBinder; } public class LocalBinder extends Binder { TimerService getService(){ return TimerService.this; } }importando quindi LocalBinder su MainActivity (di solito faccio prima nel Service e poi nell'Activity).
Una volta fatto il bindaggio posso creare le funzioni che chiamano la terza Activity "a tempo".
Per far questo creo la terza Activity.
Ho dato a questa il formato XML di quella che era la mia originale (come del resto ho fatto con MainActivity)...
Faccio il binding.
Una volta fatto il binding, creo i "movimenti circolari" del meccanismo a tempo.
Nessun commento:
Posta un commento