【问题标题】:End Android Activity in a BroadcastReceiver?在 BroadcastReceiver 中结束 Android Activity?
【发布时间】:2013-12-23 22:09:45
【问题描述】:

我在收到来自电话的振铃广播时正在启动一项活动,但是一旦接听或中止呼叫,这并没有结束(或关闭)。我需要在我的 else if 中结束活动,但不确定如何去做?最好的方法是什么?

public class CallReceiver extends BroadcastReceiver {
    Intent i;

    @Override
    public void onReceive(Context context, Intent intent) {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        assert state != null;
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            i = new Intent(context, IncomingCall.class);
            i.putExtras(intent);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            context.startActivity(i);
        }
        else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
            // WHAT GOES HERE?
        }
    }
}

【问题讨论】:

    标签: java android android-activity broadcastreceiver


    【解决方案1】:

    您可以使用LocalBroadcast ManageronReceive 内的else 语句中发送本地广播消息。在活动(您要关闭的活动)中,您可以注册您的接收器以接收本地广播。每当调用else 部分时,您都可以发送本地广播,您的活动将接收该广播。然后在您的活动中,您可以致电finish()

    对于LocalBroadcastManager,文档说:

    它是注册 Intent 广播并将其发送到进程中的本地对象的助手。与使用 sendBroadcast(Intent) 发送全局广播相比,这具有许多优势。其中之一是您正在广播的数据不会离开您的应用程序,因此不必担心泄露私人数据。`

    此广播仅适用于您的应用。所以也是安全的。您可以在这里查看如何使用它:how to use LocalBroadcastManager?。希望对你有帮助。

    【讨论】:

    • 感谢这是一本非常有趣的书,帮助实现了我的要求:-)
    【解决方案2】:

    您可以将活动对象作为参数传递给广播接收器的构造函数。然后调用 activity.finish() 结束活动。

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2017-11-01
      • 1970-01-01
      相关资源
      最近更新 更多