我正在开发一款涉及通过ProximityDevice类读取NFC标签的应用。这个想法是当在main_page上成功读取标记时,它将导航到second_page,其中将完成标记内容的所有处理。当它到达second_page时,应用程序必须不能再读取任何标记,除非它返回到main_page。
问题是当应用导航到second_page时,它仍会读取标签并执行我在main_page上声明的方法。看起来这些方法是在second_page上继承的。
有没有办法: (1)完全禁用读取接近设备,并在必要时重新启用它;要么 (2)从main_page覆盖继承的方法?
我试过了: (1)在导航到下一页之前使用stopSubscribingForMessage,但它仍然读取后续标签; (2)在second_page上声明读取标签的新方法 - 执行这些新方法,使用main_page中的方法执行。
这是我的代码:
(main_page)
public MainPage()
{
InitializeComponent();
device = ProximityDevice.GetDefault();
if (device != null)
{
device.DeviceArrived += ProximityDeviceArrived;
}
else
{
MessageBox.Show("Failed to initialize proximity device.");
}
}
public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}
public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
//reads tag content
sender.StopSubscribingForMessage(message.SubscriptionId);
NavigationService.Navigate(new Uri("/Result.xaml?tagContent=" + tagContent, UriKind.Relative));
}
(second_page)
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string tagContent = NavigationContext.QueryString["tagContent"];
//process tag content
device = ProximityDevice.GetDefault();
if (device != null)
{
device.DeviceArrived += ProximityDeviceArrived;
}
else
{
MessageBox.Show("Failed to initialize proximity device.");
}
}
public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}
public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
Debug.WriteLine("You tapped your tag again. I will do nothing.");
}
我真的希望你能帮助我!
答案 0 :(得分:1)
这些方法不会被第二页继承,只是你没有正确地从邮件中取消订阅。
您是否尝试使用SubscribeFromMessage()
的返回值代替message.SubscriptionId
来呼叫StopSubscribingForMessage()
?
这是API文档建议的内容。