Как закрыть активность из сервиса?

Я запускаю активность из службы на основе некоторого значения, полученного с сервера, и активность будет отображаться в течение некоторого времени, и после получения закрытой инструкции с сервера мне нужно закрыть эту активность, поэтому для этого я использовал следующий подход но он не работает:  по классу обслуживания:

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

Ответ от Джайнала работает для меня.