枚举短信设备

移动宽带短信平台提供获取第一个支持短信的移动宽带设备,或获取所有支持短信的移动宽带设备的列表。 以下示例代码演示如何使用默认 SMS 设备和特定设备实例化 SMS 对象。

注意在 Windows 8、Windows 8.1 或 Windows 10 中使用 C# 或 C++ 的应用中,首次使用 SmsDevice 对象调用 GetDefaultAsyncFromIdAsync 应在 STA 线程上。 来自 MTA 线程的调用可能会导致未定义的行为。

使用默认短信设备的 JavaScript 代码示例

var smsDevice = new Windows.Devices.Sms.SmsDevice.getDefault();

try
{
  var smsDeviceOperation = Windows.Devices.Sms.SmsDevice.getDefaultAsync();
  smsDeviceOperation.done(smsDeviceReceived, errorCallback);
}
catch (err)
{
  // handle error
}

枚举所有 SMS 设备的 JavaScript 代码示例

Windows.Devices.Enumeration.DeviceInformation.findAllAsync(Windows.Devices.Sms.SmsDevice.getDeviceSelector()).then(function (smsdevices) 
{
  if (smsdevices.length > 0)
  {
    // for simplicity we choose the first device
    var smsDeviceId = smsdevices[0].Id;
    var smsDeviceOperation = Windows.Devices.Sms.SmsDevice.fromIdAsync(smsNotificationDetails.deviceId); 
    smsDeviceOperation.done(function (smsDeviceResult)
    {
      smsDevice = smsDeviceResult;
    }, errorCallback);
  }
}

检测短信设备访问错误

你可以检测是否由于应用无权访问短信而枚举短信设备失败。 如果用户显式拒绝访问应用,或者设备元数据未授予对应用的访问权限,则可能会发生这种情况。

检测短信设备访问错误的 JavaScript 代码示例

Windows.Devices.Enumeration.DeviceInformation.findAllAsync(Windows.Devices.Sms.SmsDevice.getDeviceSelector()).then(function (smsdevices)
{
  if (smsdevices.length > 0)
  {
    // for simplicity we choose the first device
    var smsDeviceId = smsdevices[0].Id.slice(startIndex,endIndex + 1);
    var smsDeviceOperation = Windows.Devices.Sms.SmsDevice.fromIdAsync(smsNotificationDetails.deviceId); 
    smsDeviceOperation.done(function (smsDeviceResult)
    {
      smsDevice = smsDeviceResult;
    }, errorCallback); 

    // detect if SMS access is denied due to user not granting app consent to use SMS or if metadata is missing or invalid.

  }

function errorCallback(error)
{
  WinJS.log(error.name + " : " + error.description, "sample", "error");

  // If the error was caused due to access being denied to this app
  // then the HResult is set to E_ACCESSDENIED (0x80007005)

  // var hResult = hex(error.number);

}

function hex(nmb)
{
  if (nmb >= 0)
  {
    return nmb.toString(16);
  }
  else
  {
    return (nmb + 0x100000000).toString(16);
  }
}

开发短信应用