JavascriptProva

martedì 5 aprile 2016

Services in Android

Che sono i services?
Mi esercito a creare un service.

Creo una nuova classe, e la chiamo "Servizio".
public class Servizio {

}
Estendo la classe Service:
public class Servizio extends Service{

}
Eclipse mi dà una segnalazione di errore dicendomi di aggiungere i metodi non implementati, che aggiungo:
public class Servizio extends Service{

 @Override
 public IBinder onBind(Intent intent) {
  // TODO Auto-generated method stub
  return null;
 }

}
(parallelamente a queste operazioni mi vengono importate le classi necessarie)

Se si tratta di un service "unbound", lascio che onBind continui a restituire null, e implemento altri metodi.

Ecco, ho implementato onStartCommand, con i parametri e tutto, come da tutorial.
Non ho idea, ancora, di cosa significhino i parametri flags e startId, e perché il valore restituito sia la costante START_STICKY. Vedremo in seguito...

public class Servizio extends Service{

 @Override
 public IBinder onBind(Intent intent) {
  // TODO Auto-generated method stub
  return null;
 }
 
 @Override
 public int onStartCommand(Intent intent,int flags, int startId){
  return Service.START_STICKY;
  
 }
}


Ci aggiungo un segnale alla partenza del Service, su LogCat:
 @Override
 public int onStartCommand(Intent intent,int flags, int startId){
  Log.v("SERVICE","PARTITO");
  return Service.START_STICKY;
  
 }
Adesso implemento il metodo onDestroy, quello che viene chiamato alla distruzione del Service:
 @Override
 public void onDestroy(){
  Log.v("SERVICE","DISTRUTTO");
 }
...con il relativo segnale in LogCat.
Ora con due Buttons accendo e spengo il Service, senza dimenticare però di segnalarlo anche in Manifest:
        </activity>
        <service android:name=".Servizio" />
    </application>
<uses-permission android:name="android.permission.BLUETOOTH" />
</manifest> 
Questo è il codice dell'Activity dalla quale manipolo il Service:
public class MainActivity extends Activity {
 
 Button button1;
 Button button2;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  button1=(Button)findViewById(R.id.button1);
  button2=(Button)findViewById(R.id.button2);
  
  View.OnClickListener onClickListener =new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    if(v==button1) IniziaService();
    if(v==button2) StopService();
    
   }
  };
  
  button1.setOnClickListener(onClickListener);
  button2.setOnClickListener(onClickListener);
  
 }
 
 public void IniziaService(){
  startService(new Intent(this,Servizio.class));
 }


 public void StopService(){
  stopService(new Intent(this,Servizio.class));
 }
 
}
E andiamo a vedere...

04-05 12:25:12.570: V/SERVICE(2226): PARTITO
04-05 12:25:17.742: V/SERVICE(2226): DISTRUTTO


Perfetto!!!

Nessun commento:

Posta un commento