【问题标题】:How to close the activity from the service?如何从服务中关闭活动?
【发布时间】:2017-10-14 20:18:36
【问题描述】:

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

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

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

【问题讨论】:

  • 对不起,我不知道,以后我会接受的。

标签: android


【解决方案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"));

希望对您有所帮助。

【讨论】:

  • 嗨 Jai,谢谢你的回复,我试过了,但还是不行。
  • 它应该可以工作。检查onReceive()是否正在调用。你是否在onCreate中注册了接收者?
  • onReceive() 没有被调用,是的,我已经在 onCreate() 中注册了接收器。
  • 正如 StephaneB 所说:您必须将接收器添加到您的活动清单中。
  • 如果服务和活动在同一个应用程序中,我建议使用 LocalBroadcastManager。这有几个优点。 1-其他应用看不到广播,你的应用也收不到其他应用的广播。 2-您不需要在清单中添加接收器。 3- 性能更好(见developer.android.com/reference/android/support/v4/content/…
【解决方案2】:

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

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

【讨论】:

  • 是不是表示当收到xyz时,MyActivity会运行?
  • 实际上这意味着接收活动填充被停止,因此调用了finish()方法;)
【解决方案3】:

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

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

Jainal 的回答对我有用。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多