JavascriptProva

venerdì 22 luglio 2016

Custom Events e un Service bindato con Custom Events

Cerchiamo di chiarire le idee sulla creazione di custom events.

Per prima cosa, creo l'interfaccia, che contiene l'evento, al di fuori della classe che conterrà il metodo stesso.
 public void cambiaVerita(){
  mInterfaccia.evento();
 }
Poi bisogna considerare la classe.
public class Oggetto{
 Interfaccia mInterfaccia;

 
}
...che contiene una variabile del tipo dell'interfaccia.
Questa variabile conterrà pure l'evento ( o meglio il metodo) contenuto nell'interfaccia.
Quindi si scrive il Setter:
public class Oggetto{
 Interfaccia mInterfaccia;

 public void Setter(Interfaccia interfaccia){
  mInterfaccia=interfaccia;
 
 } 
}
e quindi le condizioni che attivano l'evento, che possono essere manipolate eventualmente anche dall'esterno della classe stessa:
public class Oggetto{
 Interfaccia mInterfaccia;

 public void Setter(Interfaccia interfaccia){
  mInterfaccia=interfaccia;
 
 }
 public void cambiaVerita(){
  mInterfaccia.evento();
 }
 
}
Riprovo a scrivere il tutto...

La classe:
public class Oggetto{
 private int numero;
 Interfaccia mInterfaccia;
 
 public void Setter(Interfaccia interfaccia){
  mInterfaccia=interfaccia;
 }
 
 public void setNumero(int num){
  numero+=num;
  if(numero>10)mInterfaccia.evento();
 }
 
}


 interface Interfaccia{
 public void evento();
}


L'istanziazione:
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  Oggetto oggetto=new Oggetto();
  oggetto.Setter(new Interfaccia(){

   @Override
   public void evento() {
    Log.d("NUMERO","SUPERATO");
    
   }
   
  });
  oggetto.setNumero(3);
  oggetto.setNumero(4);
  oggetto.setNumero(4);
 }

}

Ora scriviamo un Service che abbia un evento personalizzato.

Ce l'ho fatta!
public class Servizio extends Service {

 Interfaccia mInterfaccia;
 IBinder mBinder=new LocalBinder();
 
 @Override
 public IBinder onBind(Intent intent) {
  // TODO Auto-generated method stub
  return mBinder;
 }
 
 public class LocalBinder extends Binder {
  Servizio getService(){
   return Servizio.this;
  }
 }
 
 public void StartTime(){
  Intent intent=new Intent(this,RecordService.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+60*1000, pendingIntent);
  mInterfaccia.AlarmStateChange();
 }
 
 public void StopTime(){
  Intent intent=new Intent(this,RecordService.class);
  PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
  AlarmManager alarmManager=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  alarmManager.cancel(pendingIntent);
  if(pendingIntent!=null)pendingIntent.cancel();
  mInterfaccia.AlarmStateChange();
 }
 
 public boolean AlarmOn(){
  Intent intent=new Intent(this,RecordService.class);
  boolean check=(PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_NO_CREATE)!=null);
  return check;
 }
 
 public void Setter(Interfaccia interfaccia){
  mInterfaccia=interfaccia;
 }
 


}

interface Interfaccia{
 public void AlarmStateChange();
}

Nessun commento:

Posta un commento