我需要关闭来自广播接收器的当前 Activity 。我不确定如何从中调用完成,也许有一种方法可以模拟“后退”按键。只要能完成工作,任何实现都可以。
@Override
public void onReceive(Context context, Intent intent) {
// How can I finish the current activity here?
}
最佳答案
在你的广播接收器上写:
YourCurrentActivityName.this.finish();
或者你可以用this.finish();终止前面的activity;所以卡住的最后一个打开出现在前面。
更新: 第一种情况的代码:
使用广播接收器在后台堆栈终止 Activity :
public class ActivityFirstName extends Activity {
private BroadcastReceiver mFinishReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// other code
if (mFinishReceiver == null) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.ACTION_TERMINATE");// a string to identify your action
mFinishReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// How can I finish the current activity here?
if ("com.example.ACTION_TERMINATE".equals(intent.getAction())) {
ActivityFirstName.this.finish();
}
}
};
registerReceiver(mFinishReceiver, intentFilter);
}
// other code
}
@Override
protected void onDestroy() {
super.onDestroy();
if (isFinishing()) {
if (mFinishReceiver != null) {
unregisterReceiver(mFinishReceiver);
}
}
}
}
以及前面/当前运行的activity,广播的发送者:
public class ActivitySecondName extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
// code code code
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform action on click
terminateBackActivities();
}
});
}
private void terminateBackActivities() {
Intent i = new Intent("com.example.ACTION_TERMINATE"); // the two action strings MUST be same
// i.putExtra(...); // to send extra data
sendBroadcast(i);
}
}
关于java - 从 BroadcastReceiver 转到上一个 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639835/