拨号并返回到应用程序

时间:2018-09-04 12:32:20

标签: xamarin.forms

我试图确定何时提供数字列表,然后开始逐个调用它们。因此,流程应如下所示:

for each number in list
    ask user if they want to call. If yes:
         open dialer
         call number
         come back to the app
    If no:
         break the loop

我已经尝试过了:

public partial class MainPage : ContentPage
{
    List<string> numbers = new List<string>();
    //Consider the list is already filled with different numbers

    public MainPage()
    {
        InitializeComponent();
    }

    private async Task Button_ClickedAsync(object sender, EventArgs e)
    {
        bool answer = false;
        foreach(var number in numbers)
        {
            answer = await DisplayAlert("Question?", $"Call {number}?", "Yes", "No");
            if (answer)
            {
                var phoneDialer = CrossMessaging.Current.PhoneDialer;
                phoneDialer.MakePhoneCall(number);
            }
            else
                break;
        }
    }
}

我正在使用Messaging Plugin拨打电话。问题是,当我单击调用Button_ClickedAsync方法的按钮时,我会调用列表中的第一个数字,此后,当我结束调用并返回到应用程序时,循环将不会继续那。因此,我必须再次单击该按钮,循环将从列表中的第一个数字开始重新开始(如预期的那样)。回到我的应用程序时,如何使它在列表中继续显示,而不必每次都单击按钮?

我也尝试过Intents,但得到的结果相同:

    private async Task Button_ClickedAsync(object sender, EventArgs e)
    {
        bool answer = false;
        foreach(var number in numbers)
        {
            answer = await DisplayAlert("Question?", $"Call {number}?", "Yes", "No");
            if (answer)
            {
                var uri = Android.Net.Uri.Parse($"tel:{number}");
                var intent = new Intent(Intent.ActionDial, uri);
                Android.App.Application.Context.StartActivity(intent);
            }
            else
                break;
        }

1 个答案:

答案 0 :(得分:2)

在调用您的应用程序时,它正在进入后台,并在您挂断电话时恢复。如果在将应用程序推送到后台时不保存状态,它将像重新开始一样将其启动。

在Application类中,有一些重写方法,可用于保存状态并在恢复时检查状态。 https://docs.microsoft.com/en-gb/xamarin/xamarin-forms/app-fundamentals/app-lifecycle

因此,我的建议是存储要呼叫的当前电话号码的状态,并在简历上检查是否有以前的电话号码,然后从列表中的该号码继续。