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"));
}
}