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