如何确定在Windows Phone 8中禁用NFC?

时间:2014-07-11 11:08:08

标签: windows-phone-8 nfc

我在很多文章中都看到过像这样检查NFC被禁用的方法:

if (ProximityDevice.GetDefault() != null)
   MessageBox.Show("NFC present");
else
   MessageBox.Show("Your phone has no NFC or NFC is disabled");
如果手机没有NFC模块,

ProximityDevice.GetDefault()确实会返回null

但是当我在具有NFC模块的手机上检查时,我已经在设置ProximityDevice.GetDefault()中关闭了,如果启用了NFC,则返回正常的ProximityDevice。

有没有办法确定NFC已关闭?

2 个答案:

答案 0 :(得分:0)

正如评论中所述,ProximityDevice.GetDefault()无法判断手机是否具有NFC硬件。

ProximityDevice.GetDeviceSelector()虽然在Lumia 520(没有NFC)和Lumia 1520(确实有NFC)上运行,但报告相同的“设备”也没用。

有几个选择......

  1. 如果您的应用使用NFC作为附加功能,您可以告诉用户“NFC禁用或不可用”,这并不理想,但在这种情况下您可以做到这一点。

  2. 如果您的应用的主要功能在NFC上回复,then use the 'hardware requirements' part of the App Manifest以排除没有NFC的设备 - 手机上没有NFC硬件的用户能够从Windows Phone商店下载您的应用程序。

  3. 将来,如果您的目标是Windows Phone 8.1(Silverlight或WinRT),there is a newer API called DeviceInformation which may help

答案 1 :(得分:0)

您可以使用Windows.Devices.Enumeration API来实现这一点,但诀窍是ProximityDevice.GetDeviceSelector()中有一个子句将查询限制为仅启用的设备,因此您需要删除该子句。

因此,您需要的代码如下所示,请注意其中包含GUID的大丑字符串来自ProximityDevice.GetDeviceSelector(),只删除了其中一个子句:

var proximityDevices = await DeviceInformation.FindAllAsync("System.Devices.InterfaceClassGuid:=\"{FB3842CD-9E2A-4F83-8FCC-4B0761139AE9}\"");
if (proximityDevices.Count > 0)
{
    // NFC proximity IS supported on this device
    if(proximityDevices[0].IsEnabled)
    {
        // NFC proximity has not been disabled in the control panel
    }
    else
    {
        // NFC proximity has been disabled by the user in the control panel
    }
}
else
{
    // NFC proximity is NOT supported on this device
}