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