列舉SMS裝置
行動寬頻 SMS 平臺可讓您取得第一個支援 SMS 的行動寬頻裝置,或取得所有支援 SMS 的行動寬頻裝置清單。 下列範例程式代碼示範使用預設SMS裝置和特定裝置具現化SMS物件。
注意在 Windows 8、Windows 8.1 或 Windows 10 中使用 C# 或 C++ 的應用程式中,第一次使用 SmsDevice 物件呼叫 GetDefaultAsync 或 FromIdAsync 應該位於 STA 線程上。 來自 MTA 線程的呼叫可能會導致未定義的行為。
使用預設 SMS 裝置的 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);
}
}
偵測SMS裝置存取錯誤
您可以偵測是否列舉SMS裝置失敗,因為應用程式無法存取SMS。 如果使用者明確拒絕對應用程式的存取,或裝置元數據未授與應用程式存取權,就會發生這種情況。
偵測 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.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);
}
}