Как закрыть активность из сервиса?
Я запускаю активность из службы на основе некоторого значения, полученного с сервера, и активность будет отображаться в течение некоторого времени, и после получения закрытой инструкции с сервера мне нужно закрыть эту активность, поэтому для этого я использовал следующий подход но он не работает:
по классу обслуживания:
if(((ActivityManager)this.getSystemService(ACTIVITY_SERVICE)).getRunningTasks(1).get(0).topActivity.getPackageName().equals("com")) {
if(((ActivityManager)this.getSystemService(ACTIVITY_SERVICE)).getRunningTasks(1).get(0).topActivity.getClassName().equals("com.CustomDialogActivity")){
Intent dialogIntent = new Intent(getBaseContext(), CustomDialogActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.putExtra("description", "");
dialogIntent.putExtra("cancelEnabled", false);
dialogIntent.putExtra("close", true);
getApplication().startActivity(dialogIntent);
}
}
и по активности внутри метода onCreate:
Bundle bundle = getIntent().getExtras();
boolean isClosed = bundle.getBoolean("close");
if(isClosed){
finish();
}
Я отлаживал его и обнаружил, что элемент управления достигает метода onCreate if (isClosed) и выполняет метод finish(), но не закрывает активность.
Поэтому не удалось проанализировать, что я делаю неправильно.
Ответы
Ответ 1
Напишите широковещательный приемник в свой CustomDialogActivity, как показано ниже.
private final BroadcastReceiver abcd = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
Затем зарегистрируйте его в том же файле, как показано ниже:
onCreate(){
registerReceiver(abcd, new IntentFilter("xyz"));
}
Отмените регистрацию в onDestroy.
onDestroy(){
//unRegister
}
Теперь, когда вы хотите закрыть эту активность, просто вызовите следующее.
sendBroadcast(new Intent("xyz"));
Надеюсь на эту помощь.
Ответ 2
Вы должны добавить получателя в манифест для своей активности, например:
<activity android:name="MyActivity">
<intent-filter>
<action android:name="xyz" />
</intent-filter>
</activity>
Ответ 3
Попробуйте отправить трансляцию с использованием контекста.
context.sendBroadcast(new Intent("xyz"));
Ответ от Джайнала работает для меня.