How to end an activity from another class?

0

I need to close an activity if it has opened, when a particular timer finishes, how do I do that? because to use the finish I need context.

I tried to cast, but to no avail:

if (dados.getvideorodando()){
  try {
    ((Video2)getApplicationContext()).finish();
  }catch (Exception e){
     Log.e(TAG,"Erro ao fechar actitivy " + e);
  }
}
    
asked by anonymous 06.10.2017 / 01:42

1 answer

2

You can use a broadcast, which would serve as a listener in your activity.

Considering that you are in an activity B and are trying to close an activity A.

ActivityA.java

public class ActivityA extends AppCompatActivity {
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Esse método será chamado ao lançar um broadcast
            // pela activity B
            finish();
        }
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...

        // Aqui você registra o seu BroadcastReceiver
        // para escutar um broadcast que tenha a ação "meuFiltro".
        // Você pode alterar esse valor para qualquer outro,
        // desde que também altere na sua activity B
        LocalBroadcastManager.getInstance(this)
            .registerReceiver(broadcastReceiver, new IntentFilter("meuFiltro"));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Se essa activity for destruída por alguma outra forma,
        // você não vai precisar finalizá-la pela activity B,
        // pois ela já estará destruída
        // Então aqui o BroadcastReceiver é removido
        LocalBroadcastManager.getInstance(this)
            .unregisterReceiver(broadcastReceiver);
    }
}

ActivityB.java

public class ActivityB extends AppCompatActivity {
    ...

    private void fechaActivityA() {
        // Aqui você envia um broadcast e qualquer activity
        // que tiver um BroadcastReceiver registrado com
        // essa mesma action "meuFiltro", será chamado o
        // método onReceive() do BroadcastReceiver
        LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("meuFiltro"));
    }
}
    
06.10.2017 / 03:52