枚举短信设备
移动宽带短信平台提供获取第一个支持短信的移动宽带设备,或获取所有支持短信的移动宽带设备的列表。 以下示例代码演示如何使用默认 SMS 设备和特定设备实例化 SMS 对象。
注意在 Windows 8、Windows 8.1 或 Windows 10 中使用 C# 或 C++ 的应用中,首次使用 SmsDevice 对象调用 GetDefaultAsync 或 FromIdAsync 应在 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);
}
}