MS Surface LTE:如何枚举可用的 Windows.ApplicationModel.Calls.PhoneLine?

MS Surface LTE: How can I enumerate available Windows.ApplicationModel.Calls.PhoneLine's?

我想知道是否可以在二合一设备(例如 Microsoft Surface Go LTE)上使用 Windows.ApplicationModel.Calls 命名空间的对象编写 UWP Phone 应用程序,用于使用插入的 SIM 卡拨打 phone 电话。

如何枚举所有可用的 phone lines 以在此类线路上拨打电话?

您可以使用 PhoneLineWatcher class 枚举所有可用的 phone 行,例如:

Task<Dictionary<Guid, PhoneLine>> getPhoneLinesTask = GetPhoneLinesAsync();
……
    
private async Task<Dictionary<Guid,PhoneLine>> GetPhoneLinesAsync()
{
    PhoneCallStore store = await PhoneCallManager.RequestStoreAsync();
    var watcher = store.RequestLineWatcher();
    var phoneLines = new List<PhoneLine>();
    var lineEnumberationCompletion = new TaskCompletionSource<bool>();
    watcher.LineAdded += async (o, args) =>
    {
        var line = await PhoneLine.FromIdAsync(args.LineId);
        phoneLines.Add(line);
    };
    watcher.Stopped += (o, args) => lineEnumberationCompletion.TrySetResult(false);
        watcher.EnumerationCompleted += (o, args) => lineEnumberationCompletion.TrySetResult(true);
    watcher.Start();
    if(!await lineEnumberationCompletion.Task)
    {
        throw new Exception("Phone Line Enumeration failed");
    }
    watcher.Stop();
    Dictionary<Guid, PhoneLine> returnedLines = new Dictionary<Guid, PhoneLine>();
    foreach(PhoneLine phoneLine in phoneLines)
    {
        if(phoneLine!=null&&phoneLine.Transport==PhoneLineTransport.Cellular)
        {
            returnedLines.Add(phoneLine.Id, phoneLine);
        }
    }

    return returnedLines;
}

注意,在访问所有 phone 行之前添加 phoneCall 功能。 关于phone调用的更多信息,可以参考GitHub中的sample