Поделиться через


UssdSession.SendMessageAndGetReplyAsync(UssdMessage) Метод

Определение

Отправляет сообщение в сеанс USSD и возвращает обработчик для асинхронного получения ответа.

Примечание

Эта функция доступна только для приложений мобильных операторов и приложений UWP с привилегированным доступом со стороны операторов мобильной сети.

Если вы хотите использовать этот API и опубликовать приложение в Microsoft Store, вам потребуется специальное утверждение. Дополнительные сведения см. в разделе Ограниченные возможности статьи Объявления возможностей приложения .

public:
 virtual IAsyncOperation<UssdReply ^> ^ SendMessageAndGetReplyAsync(UssdMessage ^ message) = SendMessageAndGetReplyAsync;
IAsyncOperation<UssdReply> SendMessageAndGetReplyAsync(UssdMessage const& message);
public IAsyncOperation<UssdReply> SendMessageAndGetReplyAsync(UssdMessage message);
function sendMessageAndGetReplyAsync(message)
Public Function SendMessageAndGetReplyAsync (message As UssdMessage) As IAsyncOperation(Of UssdReply)

Параметры

message
UssdMessage

Сообщение для отправки в сеанс USSD.

Возвращаемое значение

Асинхронный обработчик для получения ответа USSD на отправленное сообщение.

Требования к Windows

Возможности приложения
cellularDeviceControl cellularDeviceIdentity

Комментарии

Отправляемое сообщение USSD может быть либо запросом, либо ответом. Операция является асинхронной и выполняет один обратный вызов с помощью интерфейса IAsyncOperation(UssdReply) по завершении. Отменить асинхронную операцию можно с помощью интерфейса IAsyncOperation(UssdReply).

Когда приложение, использующее проекцию C++ SendMessageAndGetReplyAsync, выпускает последнюю ссылку на объект UssdSession из этого обратного вызова, SendMessageAndGetReplyAsync может зависнуть. Поэтому приложения должны гарантировать, что обратный вызов не будет освобожден из SendMessageAndGetReplyAsync. Одним из способов этого является создание другой асинхронной операции (например, таймера) из обратного вызова, обратный вызов завершения которого используется для освобождения объекта сеанса путем передачи ему ссылки на объект сеанса.

#include <winrt/Windows.System.Threading.h>
using namespace winrt;
using namespace Windows::System::Threading;
...
auto timerDelegate = [ussdSession](ThreadPoolTimer const& timer) {};
Windows::Foundation::TimeSpan delay{ std::chrono::seconds(1) };
ThreadPoolTimer timer{ ThreadPoolTimer::CreateTimer(TimerElapsedHandler(timerDelegate), delay) };
auto timerDelegate = [ussdSession](Windows::System::Threading::ThreadPoolTimer^ timer) {};
Windows::Foundation::TimeSpan delay;
delay.Duration = 1; // non-zero value
Windows::System::Threading::ThreadPoolTimer^ timer = 
Windows::System::Threading::ThreadPoolTimer::CreateTimer(ref new
Windows::System::Threading::TimerElapsedHandler(timerDelegate), delay);

Применяется к