NFCLockDemoMaui/NFCLockDemoV2/MainPage.xaml.cs
2026-01-23 15:46:13 +08:00

90 lines
2.5 KiB
C#

using NFCLockDemoV2.ViewModels;
#if IOS
using Foundation;
using NFCManager = NfcLock.Ios.Binding.NFCManager;
#endif
namespace NFCLockDemoV2;
public partial class MainPage : ContentPage
{
private MainViewModel _mainMainViewModel;
#if IOS
private void SetNFCCallbacks()
{
NFCManager.SetLoopCbWithCb(new LoopCallback(this));
NFCManager.SetFinishedCbWithCb(() =>
{
System.Diagnostics.Debug.WriteLine("finished");
_mainMainViewModel.DeviceId = "--";
_mainMainViewModel.DeviceRssi = "--";
_mainMainViewModel.DeviceStatus = "NFC操作完成";
_mainMainViewModel.Operation = null;
_mainMainViewModel.ArcProgress = 0;
});
NFCManager.SetChargingCbWithCb((NSString res, int level) =>
{
System.Diagnostics.Debug.WriteLine($"res: {res}, level: {level}");
_mainMainViewModel.UpdateMessage($"充电中({level}%)");
_mainMainViewModel.ArcProgress = level;
});
NFCManager.SetControllingCbWithCb((NSString res, int progress) =>
{
System.Diagnostics.Debug.WriteLine($"res: {res}, progress: {progress}");
_mainMainViewModel.UpdateMessage($"控制中({progress}%)");
});
}
private class LoopCallback : Foundation.NSObject
{
private readonly MainPage mainPage;
public LoopCallback(MainPage page)
{
this.mainPage = page;
}
[Export("callAsFunctionWithId:isNew:rssi:")]
public bool CallAsFunction(IntPtr id, bool isNew, int rssi)
{
string deviceId = NSString.FromHandle(id);
mainPage._mainMainViewModel.DeviceId = deviceId;
mainPage._mainMainViewModel.DeviceRssi = rssi.ToString();
return true; // 继续循环
}
}
#endif
public MainPage(MainViewModel mainViewModel)
{
InitializeComponent();
_mainMainViewModel = mainViewModel;
BindingContext = _mainMainViewModel;
#if IOS
SetNFCCallbacks();
#endif
}
private void LockClicked(object? sender, EventArgs e)
{
#if IOS
NFCManager.LockWithPassword(_mainMainViewModel.Password);
NFCManager.StartScan();
#endif
}
private void UnlockClicked(object? sender, EventArgs e)
{
#if IOS
NFCManager.UnlockWithPassword(_mainMainViewModel.Password);
NFCManager.StartScan();
#endif
}
}