如何使用intent停止android中的活动?

Ton*_*ony 17 android android-intent

我认为这是一个基本问题.是否有任何选项可以通过使用intent来停止活动.

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

这是我的代码.如果用户忙或什么的话,我想停止这个活动(这意味着,我想放弃这个电话).我能做些什么?我试过这个:

if (condition) {
    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554"));
    startActivity(intent);
}else {
    this.finish();
}
Run Code Online (Sandbox Code Playgroud)

但没有用.有人有建议吗?

Kar*_*nan 26

几天前我遇到了这个问题,我很高兴地告诉你,我已经找到了解决这个问题的方法.

首先,对于要停止的活动,请在以下位置添加AndroidManifest.xml:

android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)

我将使用CheckBox示例.检查时,活动开始,未选中时将终止活动.

示例活动A正在调用活动B,然后使用intent将其杀死.

代码放入A:

checkbox.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Intent intent = new Intent(A.this, B.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            if (enable.isChecked()) {
                intent.putExtra("keep", true);
                startActivity(intent);
            }
            else
            {
                intent.putExtra("keep", false);
                startActivity(intent);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

要放入B的代码:

boolean keep;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.B);
    intent = this.getIntent();
    boolean keep = intent.getExtras().getBoolean("keep");
    if(keep==true)
    {
        //execute your code here

    }
 }
    @Override
protected void onNewIntent(Intent intent)
{
    super.onNewIntent(intent);
    keep = intent.getExtras().getBoolean("keep");
    if(keep==false)
    {
        B.this.finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

说明:这基本上是这样做的,当选中复选框时,它调用活动并传递一个布尔值,如果它是真的,则活动保持活动并被带到前台.现在,如果您没有传递该标志,singleTop那么将创建此活动的许多实例.singleTop确保只调用相同的实例.现在,当取消选中该复选框时,将传递一个新的keep值,该值将在B中验证.如果未选中,则活动A将传递false,因此B将终止于该onNewIntent()函数内.

PS - 您也可以从另一个活动关闭活动B. 只需使用如果其他活动是C:

Intent intent = new Intent(C.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("keep", false);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)