Files
WorkFlowCheck/src/WorkFlowCheck.MAUI/Platforms/Android/MainActivity.cs
T
2025-05-16 08:40:33 +02:00

128 lines
4.4 KiB
C#

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Media;
using Android.Nfc;
using Android.OS;
using Firebase;
using Plugin.Firebase.CloudMessaging;
using Plugin.NFC;
namespace WorkFlowCheck.MAUI
{
[Activity(Theme = "@style/Maui.SplashTheme",
Icon = "@mipmap/appicon",
MainLauncher = true,
LaunchMode = LaunchMode.SingleTop,
ConfigurationChanges = ConfigChanges.ScreenSize |
ConfigChanges.Orientation |
ConfigChanges.UiMode |
ConfigChanges.ScreenLayout |
ConfigChanges.SmallestScreenSize |
ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
NfcAdapter nfcAdapter;
PendingIntent pendingIntent;
static Action<string> _onTagRead;
protected async override void OnDestroy()
{
SecureStorage.Default.Remove("WFCUser");
SecureStorage.Default.Remove("AuthToken");
base.OnDestroy();
}
protected override void OnCreate(Bundle savedInstanceState)
{
CrossNFC.Init(this);
Firebase.FirebaseApp.InitializeApp(this);
base.OnCreate(savedInstanceState);
nfcAdapter = NfcAdapter.GetDefaultAdapter(this);
pendingIntent = PendingIntent.GetActivity(this, 0,
new Intent(this, typeof(MainActivity)).AddFlags(ActivityFlags.SingleTop),
Build.VERSION.SdkInt >= BuildVersionCodes.S ? PendingIntentFlags.Mutable : PendingIntentFlags.UpdateCurrent);
HandleIntent(Intent);
CreateNotificationChannelIfNeeded();
}
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
HandleIntent(intent);
CrossNFC.OnNewIntent(intent);
if (intent.Action == NfcAdapter.ActionTagDiscovered)
{
var tag = intent.GetParcelableExtra(NfcAdapter.ExtraTag) as Tag;
var id = tag?.GetId();
if (id != null)
{
var hex = BitConverter.ToString(id).Replace("-", "");
_onTagRead?.Invoke(hex);
}
}
}
protected override void OnResume()
{
base.OnResume();
// Plugin NFC: Restart NFC listening on resume (needed for Android 10+)
CrossNFC.OnResume();
}
public void StartNfc(Action<string> onTagRead)
{
_onTagRead = onTagRead;
if (nfcAdapter.IsEnabled)
{
nfcAdapter?.EnableForegroundDispatch(this, pendingIntent, null, null);
}
}
public void StopNfc()
{
_onTagRead = null;
//if (!IsFinishing && !IsDestroyed)
//{
// nfcAdapter?.DisableForegroundDispatch(this);
//}
}
private static void HandleIntent(Intent intent)
{
FirebaseCloudMessagingImplementation.OnNewIntent(intent);
}
private void CreateNotificationChannelIfNeeded()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
CreateNotificationChannel();
}
}
private void CreateNotificationChannel()
{
var soundUri = Android.Net.Uri.Parse($"android.resource://{Android.App.Application.Context.PackageName}/raw/siren_alert");
var audioAttributes = new AudioAttributes.Builder()
.SetUsage(AudioUsageKind.Notification)
.SetContentType(AudioContentType.Sonification)
.Build();
var channelId = $"{PackageName}.general";
var channel = new NotificationChannel(channelId, "General", NotificationImportance.High);
channel.SetSound(soundUri, audioAttributes);
var notificationManager = (NotificationManager)GetSystemService(NotificationService);
notificationManager.CreateNotificationChannel(channel);
FirebaseCloudMessagingImplementation.ChannelId = channelId;
}
}
}