使用广播接收器关闭Activity

3
我有一个名为Main.java的活动在我的应用程序中开启,我想使用广播接收器关闭该活动,如何关闭活动?

我在询问是否有实现这个的方法? - appukrb
3个回答

6
首先,您需要将Main.java注册为接收程序。您可以在Main.java的onResume()方法中进行注册:
@Override
public void onResume() {
    registerReceiver(broadcastReceiver, new IntentFilter(BroadcasterClassName.NAME_OF_ACTION));
}

然后处理广播并完成您的活动:

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(BroadcasterClassName.NAME_OF_ACTION)) {
            finish();
        }
    }
}

@Jack Sobremonte,感谢您的回答,我接受了您的代码,但是我有两个Java类文件,main.java是我的活动文件,receiver.java是我的广播接收器文件,那么我如何使用接收器类文件调用活动呢? - appukrb
那么你的Main.java需要扩展Receiver,而Receiver.java将扩展Activity。 - jesobremonte
我最终使用了LocalBroadcastReceiver来使我的工作正常。请查看帮助我的帖子这里 - oddmeter

0

你可以向实现了Handler.Callback接口的Activity发送一条消息,在那里处理以关闭该Activity。

快速示例:

class Act1 extends Activity implements Handler.Callback {
 public static final int CLOSE_ACTIVITY = 54212;
 public boolean handleMessage(Message msg) {
   if(msg.what == CLOSE_ACTIVITY) {
    finish();
   }
 }
}

然后,由于您的BroadcastReceiver通常在主线程上运行。只需通过Handler发送消息即可。

new Handler().sendMessage(MessageFactory.createShutdownMsg()). 

1
MessageFactory没有被包含在任何包中。 - Ajeet
请提供“MessageFactory”的实现/库。 - chubao

-1
你可以这样做: 在你的主函数里面加上:
private static Main mInstance;

onCreate()
{
   ...
   mInstance = this;
}

public static boolean closeActivity()
{
   if (mInstance != null)
   {
      mInstance.finish();
      return true;
   }
   return false;
}

尽管如此,这意味着在任何时候只存在一个主要项。我认为您可以通过在清单中添加android:noHistory="true"或类似内容来实现这一点。

如何从广播接收器中调用函数。 - appukrb
1
静态引用活动将导致内存泄漏。 - Szörényi Ádám

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接