启动后续活动时当前活动未暂停(Android)

时间:2016-04-26 03:30:36

标签: android android-activity onresume onpause pause

考虑代码:

public void callPerson(String phonenumber){

    String tel = "tel:" + phonenumber;
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(tel));

    startActivity(intent); 

    // onPause();

    // Toast.makeText(getActivity(), "this is a test toast", Toast.LENGTH_LONG).show();

}

正如您所料,在运行该代码时,当前活动会在后续活动(电话拨号程序)运行时暂停。电话结束后,原始活动会重新启动。

当我想引入一个在通话后弹出的“评级”对话框时,我的问题就出现了。

我会在哪里插入此类代码?好吧,如果我们直接在行之后插入它,“startActivity(intent);”这将与取消注释最后一行(toast)相同(?)。如果这样做,您将看到代码继续在“startActivity(intent);”行之后运行。 - 在通话期间出现祝酒词。

那么我们如何阻止代码继续运行?

您可以看到我也尝试插入“onPause()”,但这似乎也不起作用。

我理解Android生命周期,所以我能想到的唯一方法是将新的对话框代码放在onResume()中......但是我还需要做类似的事情:

@Override
public void onResume(){

    if (we are currently returning from phone call) {

        //Dialog code here

    }

}

但似乎必须有更好的方法。谢谢你的帮助!

  • 亚当

1 个答案:

答案 0 :(得分:4)

如您所知,调用startActivity()不会阻止调用方法中的其余代码。您提出的解决方案适合您的问题。只需要一个类变量,例如returningFromCall

public void callPerson(String phonenumber){

    String tel = "tel:" + phonenumber;
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(tel));

    startActivity(intent); 

    returningFromCall = true;

}

在onResume方法中检查它是否为真,然后重置它:

@Override
public void onResume() {
    if (returningFromCall) {
        showDialog();
        returningFromCall = false;
    }
}