NFC Test vol 1.
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="WorkFlowCheck.MAUI.Pages.NFC.NFCTestPage"
|
||||
Title="NFCTestPage">
|
||||
<VerticalStackLayout>
|
||||
<Label
|
||||
Text="Welcome to .NET MAUI!"
|
||||
VerticalOptions="Center"
|
||||
HorizontalOptions="Center" />
|
||||
</VerticalStackLayout>
|
||||
</ContentPage>
|
||||
@@ -0,0 +1,130 @@
|
||||
using Plugin.NFC;
|
||||
using System.Text;
|
||||
|
||||
namespace WorkFlowCheck.MAUI.Pages.NFC;
|
||||
|
||||
public partial class NFCTestPage : ContentPage
|
||||
{
|
||||
public NFCTestPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
public const string ALERT_TITLE = "NFC";
|
||||
bool _eventsAlreadySubscribed = false;
|
||||
protected override async void OnAppearing()
|
||||
{
|
||||
base.OnAppearing();
|
||||
CrossNFC.Legacy = false;
|
||||
if (CrossNFC.IsSupported)
|
||||
{
|
||||
if (!CrossNFC.Current.IsAvailable)
|
||||
await ShowAlert("NFC is not available");
|
||||
|
||||
if (!CrossNFC.Current.IsEnabled)
|
||||
await ShowAlert("NFC is disabled");
|
||||
|
||||
await AutoStartAsync().ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await ShowAlert("NFC is not available");
|
||||
}
|
||||
}
|
||||
Task ShowAlert(string message, string title = null) => DisplayAlert(string.IsNullOrWhiteSpace(title) ? ALERT_TITLE : title, message, "OK");
|
||||
async Task AutoStartAsync()
|
||||
{
|
||||
// Some delay to prevent Java.Lang.IllegalStateException "Foreground dispatch can only be enabled when your activity is resumed" on Android
|
||||
await Task.Delay(500);
|
||||
await StartListeningIfNotiOS();
|
||||
}
|
||||
async Task StartListeningIfNotiOS()
|
||||
{
|
||||
|
||||
await BeginListening();
|
||||
}
|
||||
async Task BeginListening()
|
||||
{
|
||||
try
|
||||
{
|
||||
MainThread.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
SubscribeEvents();
|
||||
CrossNFC.Current.StartListening();
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await ShowAlert(ex.Message);
|
||||
}
|
||||
}
|
||||
void SubscribeEvents()
|
||||
{
|
||||
if (_eventsAlreadySubscribed)
|
||||
UnsubscribeEvents();
|
||||
|
||||
_eventsAlreadySubscribed = true;
|
||||
|
||||
CrossNFC.Current.OnMessageReceived += Current_OnMessageReceived;
|
||||
//CrossNFC.Current.OnMessagePublished += Current_OnMessagePublished;
|
||||
//CrossNFC.Current.OnTagDiscovered += Current_OnTagDiscovered;
|
||||
//CrossNFC.Current.OnNfcStatusChanged += Current_OnNfcStatusChanged;
|
||||
//CrossNFC.Current.OnTagListeningStatusChanged += Current_OnTagListeningStatusChanged;
|
||||
|
||||
|
||||
}
|
||||
void UnsubscribeEvents()
|
||||
{
|
||||
CrossNFC.Current.OnMessageReceived -= Current_OnMessageReceived;
|
||||
//CrossNFC.Current.OnMessagePublished -= Current_OnMessagePublished;
|
||||
//CrossNFC.Current.OnTagDiscovered -= Current_OnTagDiscovered;
|
||||
//CrossNFC.Current.OnNfcStatusChanged -= Current_OnNfcStatusChanged;
|
||||
//CrossNFC.Current.OnTagListeningStatusChanged -= Current_OnTagListeningStatusChanged;
|
||||
|
||||
|
||||
|
||||
_eventsAlreadySubscribed = false;
|
||||
}
|
||||
async void Current_OnMessageReceived(ITagInfo tagInfo)
|
||||
{
|
||||
if (tagInfo == null)
|
||||
{
|
||||
await ShowAlert("No tag found");
|
||||
return;
|
||||
}
|
||||
|
||||
// Customized serial number
|
||||
var identifier = tagInfo.Identifier;
|
||||
var serialNumber = NFCUtils.ByteArrayToHexString(identifier, ":");
|
||||
var title = !string.IsNullOrWhiteSpace(serialNumber) ? $"Tag [{serialNumber}]" : "Tag Info";
|
||||
|
||||
if (!tagInfo.IsSupported)
|
||||
{
|
||||
await ShowAlert("Unsupported tag (app)", title);
|
||||
}
|
||||
else if (tagInfo.IsEmpty)
|
||||
{
|
||||
await ShowAlert("Empty tag", title);
|
||||
}
|
||||
else
|
||||
{
|
||||
var first = tagInfo.Records[0];
|
||||
await ShowAlert(GetMessage(first), title);
|
||||
}
|
||||
}
|
||||
string GetMessage(NFCNdefRecord record)
|
||||
{
|
||||
var message = $"Message: {record.Message}";
|
||||
message += Environment.NewLine;
|
||||
message += $"RawMessage: {Encoding.UTF8.GetString(record.Payload)}";
|
||||
message += Environment.NewLine;
|
||||
message += $"Type: {record.TypeFormat}";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(record.MimeType))
|
||||
{
|
||||
message += Environment.NewLine;
|
||||
message += $"MimeType: {record.MimeType}";
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user