В настоящее время я работаю над переносом приложения в UWP. В приложении есть страница с кнопкой "Write to NFC". После того, как пользователь ударит его, он ждет ярлыка NFC и записывает двоичное сообщение LaunchApp:WriteTag
.
Что работало нормально в WP8.1, вообще не работает под Windows 10 UWP:
var proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();
if (proximityDevice != null)
{
var launchArgs = "user=default";
var appId = "App";
var appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + appId;
var launchAppMessage = launchArgs + "\tWindows\t" + appName;
var dataWriter = new Windows.Storage.Streams.DataWriter();
dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
dataWriter.WriteString(launchAppMessage);
var launchAppPubId = proximityDevice.PublishBinaryMessage("LaunchApp:WriteTag", dataWriter.DetachBuffer());
}
К сожалению, это не сработает. Возможность NFC включена, и приложение WP8.1 работает на одном телефоне, поэтому это не должно быть проблемой.
Я уже пробовал несколько форматов, так как проблема выглядит как launchAppMessage
, где я не нашел для этого документа UWP. Там есть статья Windows 8+ MSDN, в которой описывается строка в формате:
myArgs\tWindows\tAppFamilyName!App
Что я пробовал:
-
myArgs
достаточно короткий - не должно быть проблемой. -
Windows
илиWindowsPhone
не имеет никакого значения. Оба не работают. -
AppFamilyName
- это правильное имя семейства приложений, которое находится внутри манифеста приложения. Приложение связано с хранилищем, и похоже, что это тоже не проблема. -
App
- это то, что внутри<Application id="App" ... />
в манифесте приложения. ПопыткаMyAppNamespace.App
тоже не работала, и вызовCurrentApp.AppId
(что используется в приложениях WinRT) генерирует исключение.
Под "нерабочим" я подразумеваю, что он записывает тег, но тег вообще не распознается Windows 10.
Еще одна вещь, которую я нашел, заключается в том, что для myArgs\tWindows\tAppFamilyName!App
приложение выдает следующее исключение - без каких-либо дополнительных сведений:
System.ExecutionEngineException was unhandled
Message: An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.
Я действительно надеюсь, что у кого-то есть идея, как это решить. К сожалению, для этого пока нет образцов UWP, и документы все еще старые...:/
PS: использование пользовательского протокола вместе с WindowsUri:WriteTag
отлично работает, но я хочу открыть только мое приложение с помощью тега NFC. Кроме того, диалоговое окно подтверждения выглядит так: "Вы хотите открыть приложение, связанное с mycustomprotocol?" - который выглядит не очень удобным для пользователя. Так что никакого реального решения для меня, более обходного пути я не хочу использовать.