Как запустить приложение с помощью NFC-тега на Windows Phone 8?
У меня есть устройство Windows Phone 8, несколько NDEF-тегов в формате NFC, и мне интересно, можно ли реализовать запуск приложения на моем WP8 с помощью этих тегов? Я внимательно прочитал эту статью о схемахURI для запуска встроенных приложений для Windows Phone 8 , но не нашел ни одной ссылки, связанной с фактическим запуском сторонних приложений. Я могу запускать различные экраны настроек, или браузер, электронную почту, SMS...
Что еще интереснее, так это то, что в магазине WP есть по крайней мере два NFC-тега, которые можно "писать теги для запуска приложений", я пробовал их, но запуск просто не работает.
Таким образом, вопрос заключается в следующем: можно ли хранить информацию о теге NFC для запуска любого стороннего приложения на WP8? Если да, то каков формат такой схемы URI и как записать ее в тег с помощью WP8?
2 ответа:
Да, вы можете запустить любое приложение Windows Phone 8 с помощью NFC-тега. Вам нужно поместить сообщение NDEF на тег, который имеет
LaunchApp
запись как первая запись. Установите идентификатор платформы в полезных данных записи NDEF в "WindowsPhone" и установите идентификатор приложения в шестнадцатеричную строку в конце URL-адреса магазина Windows Phone между " {"и"}", например, для http://www.windowsphone.com/en-us/store/app/stackoverflow-feeds/226fcc72-69ff-4a85-b945-cbb7f5ea00af to "{226fcc72-69ff-4a85-b945-cbb7f5ea00af}".Эта библиотека может помочь создать такие записи NDEF. Ограниченная документация от MS доступна здесь .
Чтобы запустить приложение с помощью NFC-тега, необходимо зарегистрировать его для ассоциации URI, добавив расширение в файл
WMAppManifest.xml
, например:<Extensions> <Protocol Name="mynfcapp" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" /> </Extensions>
Затем вам нужно будет создать URI mapper, который может обрабатывать ассоциацию URI, например:
public class AssociationUriMapper : UriMapperBase { public override Uri MapUri(Uri uri) { string url = HttpUtility.UrlDecode(uri.ToString()); if (url.Contains("mynfcapp:MainPage")) { int paramIndex = url.IndexOf("source=") + 7; string paramValue = url.Substring(paramIndex); return new Uri("/MainPage.xaml?source=" + paramValue, UriKind.Relative); } return uri; } }
А вот код для написания тега NFC, который запустит приложение:
public partial class MainPage : PhoneApplicationPage { private readonly ProximityDevice _proximityDevice; private long subId = 0; private long pubId = 0; public MainPage() { InitializeComponent(); _proximityDevice = ProximityDevice.GetDefault(); } protected override void OnNavigatedTo(NavigationEventArgs e) { if (_proximityDevice != null) subId = _proximityDevice.SubscribeForMessage("WriteableTag", OnWriteableTagArrived); base.OnNavigatedTo(e); } private void OnWriteableTagArrived(ProximityDevice sender, ProximityMessage message) { var dataWriter = new DataWriter(); dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE; string appLauncher = string.Format(@"mynfcapp:MainPage?source=mynfctest"); dataWriter.WriteString(appLauncher); pubId = sender.PublishBinaryMessage("WindowsUri:WriteTag", dataWriter.DetachBuffer()); } }