如何关闭服务中的活动?

时间:2011-11-16 09:42:04

标签: android

我根据从服务器获得的某些值启动服务的活动,活动将显示一段时间,在收到服务器的关闭指令后,我需要关闭该活动,所以我使用了以下方法但它不起作用:  在服务类:

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()方法,但它没有关闭活动。

所以无法分析我在做什么错误。

3 个答案:

答案 0 :(得分:52)

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

希望得到这个帮助。

答案 1 :(得分:3)

您必须将接收器添加到活动的清单中,例如:

    <activity  android:name="MyActivity">
        <intent-filter>
            <action android:name="xyz" />
        </intent-filter>
    </activity>

答案 2 :(得分:1)

尝试使用上下文发送广播。

context.sendBroadcast(new Intent("xyz"));

Jainal的回答正在为我工​​作。