我有一个活动,当电话响铃时(通过电话应用程序)我显示为无模式。我想在发生以下任一事件时完成活动。第一个是如果我触摸活动之外的任何地方(这不是问题),第二个是如果振铃停止。我正在收听广播接收器中的IDLE_STATE,但我不确定如何在看到它时调用活动的结束。接收者不是由活动注册,而是由Manifest.xml注册
答案 0 :(得分:15)
现在在接收广播中编写代码,这将发送另一个名为“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();
};
}
这将完成活动
答案 1 :(得分:0)
如果您从活动中注册另一个广播接收器,该怎么办?然后,当你想杀死它时,从你提到的广播接收器发送广播消息。
答案 2 :(得分:0)
我实际上最终在Activity中添加了一个PhoneStateListener来监听IDLE_STATE。
答案 3 :(得分:0)
经过长期的互联网研发,我解决了我的问题。如果您从广播接收器开始活动,则下面的代码会很有帮助 清除所有活动堆栈实例。
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
moveTaskToBack(true);
}
}
答案 4 :(得分:0)
我使用此代码解决了我的问题。 finish
是Activity
的方法,因此调用Activity
并使用如下上下文:
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Log.e(TAG, "Inside EXTRA_STATE_IDLE");
((Activity) arg0).finish();
}