UWP:如何发送 USSD 请求。 (获取异常,调用 SendMessageAndGetReplyAsync 时)

UWP: How to send USSD request. (Get exception, when call SendMessageAndGetReplyAsync)

请帮我发送 ussd 请求。

IReadOnlyList<string> networkAccIds = MobileBroadbandAccount.AvailableNetworkAccountIds;
if (networkAccIds.Count == 0)
{
    return;
}
string networkAccountId = networkAccIds[0];
UssdSession session = UssdSession.CreateFromNetworkAccountId(networkAccIds[0]);

2 sim 卡安装在我的 phone 中。但是 networkAccIds.Count 始终为零。我的错误是什么?

更新 1:

谢谢。我得到了网络标识符。我有一个新问题。当我这样做时:

UssdReply reply = await session.SendMessageAndGetReplyAsync(new UssdMessage("*100#")); 

我遇到异常:

发生意外异常:System.Runtime.InteropServices.COMException (0x80070032): 不支持该请求。

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()


   at uwp_1.MainPage.<GetBalance>d__1.MoveNext()

为什么会出现异常?

2 sim card installed in my phone. But networkAccIds.Count always zero. What's my mistake?

您正在访问 特权 APIsUssdSession and MobileBroadbandAccount) used by mobile broadband operators. It requires a special-use capability 将在 程序包清单中声明:

<Capabilities>
  <r:Capability Name="cellularDeviceIdentity"/>
  <r:Capability Name="cellularDeviceControl"/>
  <r:Capability Name="cellularMessaging"/>
</Capabilities>

请确保您已经声明了相应的special-use capabilities in package manifest. And the Mobile broadband sample,其中显示了如何使用移动宽带网络API供您参考。

另外:

您的应用程序可以运行,您可以在 phone 上对其进行测试,但它不会通过 WACK(Windows 应用程序认证工具包),因为它使用 special-use capability。此类应用可用于公司应用(无需发布到 Windows 商店)、MS 内部或 OEM/partner。