2010-11-09 17 views

risposta

10

La comunicazione da BroadcastReceiver a Activity è permissiva; cosa succede se l'attività è già andata?

Se fossi in te avrei creato una nuova BroadcastReceiver all'interno della attività, che avrebbe ricevuto un messaggio CLOSE:

private BroadcastReceiver closeReceiver; 
// ... 
closeReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    //EDIT: receiving parameters 
    String value = getIntent().getStringExtra("name"); 
    //... do something with value 

    finish(); 
    } 
}; 
registerReceiver(closeReceiver, new IntentFilter(CLOSE_ACTION)); 

Poi dalla SMS BroadcastReceiver è possibile inviare questa azione:

Intent i = new Intent(CLOSE_ACTION); 
i.putExtra("name", "value"); //EDIT: this passes a parameter to the receiver 
context.sendBroadcast(i); 

Spero che questo aiuti?

+0

Mhm ... Sto registrando il ricevitore direttamente nel manifesto ... e ho bisogno di scambiare i dati con il ricevitore ... – NonoNever

+0

Nessun problema. I dati possono essere inviati usando Extra. i.putExtra ("nome", "valore"); Tuttavia, solo i tipi primitivi possono essere passati. – Emmanuel

+0

Correzione rapida: 'context.sendBroadcast (i);' deve utilizzare il contesto BroadcastReceiver per propagare l'intento. – GoRoS

1

Il problema con la registrazione di un secondo ricevitore all'interno dell'attività, tuttavia, è che non sarà persistente come la registrazione nel manifest ... quindi, sebbene questa soluzione possa funzionare, funzionerà solo se l'attività è in esecuzione in sfondo.

+2

Questo sembra più appropriato come commento invece che come risposta. –

0

è facile, l'interfaccia uso così:

1) nel vostro ricevitore trasmissione creare un'interfaccia.

public interface ChangeListener{ 
    public void functionWhoSendData(String type); 
    public void etc(); 
} 

e creare un'istanza che si interfacciano nel vostro ricevitore broadcast, lo usano:

public void onReceive(.... 
    String data=functionWhereYouReceiveYouData(); 
    ChangeListener.functionWhoSendData(data); 
} 

E nella vostra attività, rendono implementa l'interfaccia

+0

quando lo faccio ottengo il ClassCastException. Apparentemente il contesto nel onReceive non può essere lanciato sull'interfaccia. – user1007522

2

ho avuto lo stesso problema, ho provato ad utilizzare intento ma non ho avuto successo

Il modo più semplice per usarlo sarebbe utilizzare metodi statici e variabili statiche

MainActivity.java

public static void stopsms() 
{ 

/* 
some code to stop the activity 

*/ 

} 

SMSReceiver.java

alla fine chiamata questa funzione

MainActivity.stopsms(); 

Funziona sorprendente se il codice non modifica quando si utilizza statica metodi e variabili. Fammi sapere se hai bisogno di aiuto.

+0

c'è un modo per accedere al contesto di mainactivity da quella funzione statica del vuoto? – Dnaso

+2

non è pericoloso, chiamando un metodo statico sull'attività? Cosa succede se l'attività non esiste più? – user1007522

Problemi correlati