private void BtnWriteMailTo_Click(object sender, System.Windows.RoutedEventArgs e) { // Create a new mailto record, set the relevant properties for the email var record = new NdefMailtoRecord { Address = "*****@*****.**", Subject = "Feedback for the NDEF Library", Body = "I think the NDEF library is ..." }; // Publish the record using the proximity device PublishRecord(record, true); }
// ------------------------------------------ // PRIVATE READER // ------------------------------------------ private void MessageReceivedHandler(ProximityDevice sender, ProximityMessage message) { // Parse raw byte array to NDEF message var rawMsg = message.Data.ToArray(); var ndefMessage = NdefMessage.FromByteArray(rawMsg); // Loop over all records contained in the NDEF message foreach (NdefRecord record in ndefMessage) { Console.WriteLine("Record type: " + Encoding.UTF8.GetString(record.Type, 0, record.Type.Length)); // Check the type of each record - handling a Smart Poster in this example var specializedType = record.CheckSpecializedType(true); // Convert and extract Smart Poster info if (specializedType == typeof(NdefSpRecord)) { var spRecord = new NdefSpRecord(record); String msg = "URI: " + spRecord.Uri + "\n" + "Titles: " + spRecord.TitleCount() + "\n" + "1. Title: " + spRecord.Titles[0].Text + "\n" + "Action set: " + spRecord.ActionInUse(); NFCManager.getInstance().Alert(msg); } // Convert and extract URI record info else if (specializedType == typeof(NdefUriRecord)) { var uriRecord = new NdefUriRecord(record); String msg = "URI: " + uriRecord.Uri + "\n"; NFCManager.getInstance().Alert(msg); NFCManager.getInstance().SendRequest(uriRecord.Uri); } // Convert and extract Mailto record info else if (specializedType == typeof(NdefMailtoRecord)) { var mailtoRecord = new NdefMailtoRecord(record); String msg = "Address: " + mailtoRecord.Address + "\n" + "Subject: " + mailtoRecord.Subject + "\n" + "Body: " + mailtoRecord.Body; NFCManager.getInstance().Alert(msg); } } }
public static String ProcessNFCRecord(NdefRecord record) { //Define the tag content we want to return. String tagContent = null; //Make sure we have a record. if (record != null) { //Check if the record is a URL. if (record.CheckSpecializedType(true) == typeof(NdefUriRecord)) { //The content is a URL. tagContent = new NdefUriRecord(record).Uri; } else if (record.CheckSpecializedType(true) == typeof(NdefMailtoRecord)) { //The content is a mailto record. tagContent = new NdefMailtoRecord(record).Uri; } else if (record.CheckSpecializedType(true) == typeof(NdefTelRecord)) { //The content is a tel record. tagContent = new NdefTelRecord(record).Uri; } else if (record.CheckSpecializedType(true) == typeof(NdefSmsRecord)) { //The content is a sms record. tagContent = new NdefSmsRecord(record).Uri; } else if (record.CheckSpecializedType(true) == typeof(NdefTextRecord)) { //The content is a text record. tagContent = new NdefTextRecord(record).Text; } else { //Try and force a pure text conversion. tagContent = Encoding.UTF8.GetString(record.Payload); } } //Return the tag content. return(tagContent); }
private async void MessageReceivedHandler(ProximityDevice sender, ProximityMessage message) { // Get the raw NDEF message data as byte array var rawMsg = message.Data.ToArray(); // Let the NDEF library parse the NDEF message out of the raw byte array var ndefMessage = NdefMessage.FromByteArray(rawMsg); // Analysis result var tagContents = new StringBuilder(); // Loop over all records contained in the NDEF message foreach (NdefRecord record in ndefMessage) { // -------------------------------------------------------------------------- // Print generic information about the record if (record.Id != null && record.Id.Length > 0) { // Record ID (if present) tagContents.AppendFormat("Id: {0}\n", Encoding.UTF8.GetString(record.Id, 0, record.Id.Length)); } // Record type name, as human readable string tagContents.AppendFormat("Type name: {0}\n", ConvertTypeNameFormatToString(record.TypeNameFormat)); // Record type if (record.Type != null && record.Type.Length > 0) { tagContents.AppendFormat("Record type: {0}\n", Encoding.UTF8.GetString(record.Type, 0, record.Type.Length)); } // -------------------------------------------------------------------------- // Check the type of each record // Using 'true' as parameter for CheckSpecializedType() also checks for sub-types of records, // e.g., it will return the SMS record type if a URI record starts with "sms:" // If using 'false', a URI record will always be returned as Uri record and its contents won't be further analyzed // Currently recognized sub-types are: SMS, Mailto, Tel, Nokia Accessories, NearSpeak, WpSettings var specializedType = record.CheckSpecializedType(true); if (specializedType == typeof(NdefMailtoRecord)) { // -------------------------------------------------------------------------- // Convert and extract Mailto record info var mailtoRecord = new NdefMailtoRecord(record); tagContents.Append("-> Mailto record\n"); tagContents.AppendFormat("Address: {0}\n", mailtoRecord.Address); tagContents.AppendFormat("Subject: {0}\n", mailtoRecord.Subject); tagContents.AppendFormat("Body: {0}\n", mailtoRecord.Body); } else if (specializedType == typeof(NdefUriRecord)) { // -------------------------------------------------------------------------- // Convert and extract URI record info var uriRecord = new NdefUriRecord(record); tagContents.Append("-> URI record\n"); tagContents.AppendFormat("URI: {0}\n", uriRecord.Uri); } else if (specializedType == typeof(NdefLaunchAppRecord)) { // -------------------------------------------------------------------------- // Convert and extract LaunchApp record info var launchAppRecord = new NdefLaunchAppRecord(record); tagContents.Append("-> LaunchApp record" + Environment.NewLine); if (!string.IsNullOrEmpty(launchAppRecord.Arguments)) { tagContents.AppendFormat("Arguments: {0}\n", launchAppRecord.Arguments); } if (launchAppRecord.PlatformIds != null) { foreach (var platformIdTuple in launchAppRecord.PlatformIds) { if (platformIdTuple.Key != null) { tagContents.AppendFormat("Platform: {0}\n", platformIdTuple.Key); } if (platformIdTuple.Value != null) { tagContents.AppendFormat("App ID: {0}\n", platformIdTuple.Value); } } } } else if (specializedType == typeof(NdefVcardRecordBase)) { // -------------------------------------------------------------------------- // Convert and extract business card info var vcardRecord = await NdefVcardRecord.CreateFromGenericBaseRecord(record); tagContents.Append("-> Business Card record" + Environment.NewLine); tagContents.AppendFormat("vCard Version: {0}" + Environment.NewLine, vcardRecord.VCardFormatToWrite == VCardFormat.Version2_1 ? "2.1" : "3.0"); var contact = vcardRecord.ContactData; var contactInfo = await contact.GetPropertiesAsync(); foreach (var curProperty in contactInfo.OrderBy(i => i.Key)) { tagContents.Append(String.Format("{0}: {1}" + Environment.NewLine, curProperty.Key, curProperty.Value)); } } else { // Other type, not handled by this demo tagContents.Append("NDEF record not parsed by this demo app" + Environment.NewLine); } } // Update status text for UI SetStatusOutput(string.Format(AppResources.StatusTagParsed, tagContents)); }
private async Task ParseTagContents(NdefMessage ndefMessage, StringBuilder tagContents) { // Loop over all records contained in the NDEF message foreach (NdefRecord record in ndefMessage) { // -------------------------------------------------------------------------- // Print generic information about the record if (record.Id != null && record.Id.Length > 0) { // Record ID (if present) tagContents.AppendFormat("Id: {0}\n", Encoding.UTF8.GetString(record.Id, 0, record.Id.Length)); } // Record type name, as human readable string tagContents.AppendFormat("Type name: {0}\n", ConvertTypeNameFormatToString(record.TypeNameFormat)); // Record type if (record.Type != null && record.Type.Length > 0) { tagContents.AppendFormat("Record type: {0}\n", Encoding.UTF8.GetString(record.Type, 0, record.Type.Length)); } // -------------------------------------------------------------------------- // Check the type of each record // Using 'true' as parameter for CheckSpecializedType() also checks for sub-types of records, // e.g., it will return the SMS record type if a URI record starts with "sms:" // If using 'false', a URI record will always be returned as Uri record and its contents won't be further analyzed // Currently recognized sub-types are: SMS, Mailto, Tel, Nokia Accessories, NearSpeak, WpSettings var specializedType = record.CheckSpecializedType(true); if (specializedType == typeof(NdefMailtoRecord)) { // -------------------------------------------------------------------------- // Convert and extract Mailto record info var mailtoRecord = new NdefMailtoRecord(record); tagContents.Append("-> Mailto record\n"); tagContents.AppendFormat("Address: {0}\n", mailtoRecord.Address); tagContents.AppendFormat("Subject: {0}\n", mailtoRecord.Subject); tagContents.AppendFormat("Body: {0}\n", mailtoRecord.Body); } else if (specializedType == typeof(NdefUriRecord)) { // -------------------------------------------------------------------------- // Convert and extract URI record info var uriRecord = new NdefUriRecord(record); tagContents.Append("-> URI record\n"); tagContents.AppendFormat("URI: {0}\n", uriRecord.Uri); } else if (specializedType == typeof(NdefSpRecord)) { // -------------------------------------------------------------------------- // Convert and extract Smart Poster info var spRecord = new NdefSpRecord(record); tagContents.Append("-> Smart Poster record\n"); tagContents.AppendFormat("URI: {0}", spRecord.Uri); tagContents.AppendFormat("Titles: {0}", spRecord.TitleCount()); if (spRecord.TitleCount() > 1) { tagContents.AppendFormat("1. Title: {0}", spRecord.Titles[0].Text); } tagContents.AppendFormat("Action set: {0}", spRecord.ActionInUse()); // You can also check the action (if in use by the record), // mime type and size of the linked content. } else if (specializedType == typeof(NdefVcardRecordBase)) { // -------------------------------------------------------------------------- // Convert and extract business card info var vcardRecord = new NdefVcardRecord(record); tagContents.Append("-> Business Card record" + Environment.NewLine); var contact = vcardRecord.ContactData; // Contact has phone or email info set? Use contact manager to show the contact card await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { if (contact.Emails.Any() || contact.Phones.Any()) { var rect = GetElementRect(StatusOutput); ContactManager.ShowContactCard(contact, rect, Placement.Below); } else { // No phone or email set - contact manager would not show the contact card. // -> parse manually tagContents.AppendFormat("Name: {0}\n", contact.DisplayName); tagContents.Append("[not parsing other values in the demo app]"); } }); } else if (specializedType == typeof(NdefLaunchAppRecord)) { // -------------------------------------------------------------------------- // Convert and extract LaunchApp record info var launchAppRecord = new NdefLaunchAppRecord(record); tagContents.Append("-> LaunchApp record" + Environment.NewLine); if (!string.IsNullOrEmpty(launchAppRecord.Arguments)) { tagContents.AppendFormat("Arguments: {0}\n", launchAppRecord.Arguments); } if (launchAppRecord.PlatformIds != null) { foreach (var platformIdTuple in launchAppRecord.PlatformIds) { if (platformIdTuple.Key != null) { tagContents.AppendFormat("Platform: {0}\n", platformIdTuple.Key); } if (platformIdTuple.Value != null) { tagContents.AppendFormat("App ID: {0}\n", platformIdTuple.Value); } } } } else if (specializedType == typeof(NdefMimeImageRecordBase)) { // -------------------------------------------------------------------------- // Convert and extract Image record info var imgRecord = new NdefMimeImageRecord(record); tagContents.Append("-> MIME / Image record" + Environment.NewLine); _dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => SetStatusImage(await imgRecord.GetImageAsBitmap())); } else { // Other type, not handled by this demo tagContents.Append("NDEF record not parsed by this demo app" + Environment.NewLine); } } }