我根据从服务器获得的某些值启动服务的活动,活动将显示一段时间,在收到服务器的关闭指令后,我需要关闭该活动,所以我使用了以下方法但它不起作用: 在服务类:
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()方法,但它没有关闭活动。
所以无法分析我在做什么错误。
答案 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的回答正在为我工作。