android example - Chiamando un metodo di attività da BroadcastReceiver in Android




2 Answers

prova questo codice:

la tua classe broadcastreceiver per la classe internet persa:

public class InternetLostReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
    context.sendBroadcast(new Intent("INTERNET_LOST"));
}
}

nella tua attività aggiungi questo per chiamare la trasmissione:

public class TestActivity  extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    registerReceiver(broadcastReceiver, new IntentFilter("INTERNET_LOST"));
}

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // internet lost alert dialog method call from here...
    }
};

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(broadcastReceiver);
}
}
manifest intent

Qui sto creando un'applicazione online che dipende solo da Internet.

Quindi, ogni volta che si verifica un errore di rete, è necessario avvisare l'utente. Per questo, ho creato un BroadcastReciver che riceve una chiamata quando si perde la connessione di rete (Internet).

Tutto questo funziona perfettamente. Ora ciò di cui ho bisogno è che devo chiamare un metodo di attività da questo ricevitore Broadcast, in cui ho creato un dialogo di avviso.

Ho letto molte risposte su stack-overflow.com che posso dichiarare il metodo statico e chiamare utilizzando solo il nome dell'attività,

es. MyActivityName.myMethod()

Ma non posso dichiarare il mio metodo statico, perché sto usando Alert Dialogue e mi mostra l'errore on line,

AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);

che non può usare questo in un contesto statico .

Quindi, come posso chiamare un metodo di attività (non statico e senza avviare quell'attività) da un ricevitore Broadcast?

E posso ottenere il nome dell'attività (o del frammento) da Broadcast Receiver che è attualmente in esecuzione?




Passa il contesto della tua attività al contructor di BroadcastReceiver.

public class ResponseReceiver extends BroadcastReceiver{

    MainActivity ma; //a reference to activity's context

    public ResponseReceiver(MainActivity maContext){
        ma=maContext;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        ma.brCallback("your string"); //calling activity method
    }

}

e nella tua MainActivity

public class MainActivity extends AppCompatActivity {
    ...
    public void onStart(){
        ...        
    ResponseReceiver responseReceiver = new ResponseReceiver(this); //passing context
    LocalBroadcastManager.getInstance(this).registerReceiver(responseReceiver,null);
        ...
    }

    public void brCallback(String param){
        Log.d("BroadcastReceiver",param);
    }
}

spero che sia d'aiuto




Related

android methods android-activity broadcastreceiver static-methods