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