从广播接收器结束一个活动

11

我有一个Activity,当手机响铃时(在电话应用程序上方)以非模态方式显示。当出现以下事件之一时,我想完成该Activity。第一种情况是如果我触摸Activity外的任何地方(这不是问题),第二种情况是响铃停止。我正在广播接收器中监听IDLE_STATE,但我不确定如何在看到它时调用Activity的finish方法。接收器不是由Activity而是由Manifest.xml注册的。

5个回答

20

现在在接收广播的代码中编写以下内容,这将发送另一个名为“com.hello.action”的意图广播。

Intent local = new Intent();
local.setAction("com.hello.action");
sendBroadcast(local);

现在,在你想要结束它的活动中捕获这个意图,然后在你的接收器的onReceive方法中调用super.finish(),就像这样:

public class fileNamefilter extends Activity {
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    IntentFilter filter = new IntentFilter();

    filter.addAction("com.hello.action");
    registerReceiver(receiver, filter);

    }
BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        finish();

    }
};

public void finish() {
    super.finish();
};
}

这将结束该活动


0
经过长时间在互联网上的研究,我解决了我的问题。如果您从广播接收器启动活动并清除所有活动堆栈实例,则下面的代码非常有用。
 @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            moveTaskToBack(true);
        }
    }

0
如果您从活动中注册另一个广播接收器,那么当您想要终止它时,请从所提到的广播接收器发送广播消息。

0

我最终在Activity中添加了一个PhoneStateListener来监听IDLE_STATE。


0
我使用了这段代码来解决我的问题。`finish`是`Activity`的方法,所以要像这样调用`Activity`和上下文:
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
     Log.e(TAG, "Inside EXTRA_STATE_IDLE");
     ((Activity) arg0).finish();
}

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