add: fuck you android

This commit is contained in:
2025-08-09 20:35:05 +08:00
parent 5e3ef9be21
commit c42562bc15
10 changed files with 1371 additions and 1 deletions

View File

@ -1,6 +1,11 @@
using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Content;
using Android.Provider;
using AndroidX.Core.App;
using AndroidX.Core.Content;
using HeartRateMonitorAndroid.Platforms.Android;
namespace HeartRateMonitorAndroid;
@ -9,4 +14,178 @@ namespace HeartRateMonitorAndroid;
ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
private const int BATTERY_OPTIMIZATION_REQUEST = 1001;
private const int NOTIFICATION_PERMISSION_REQUEST = 1002;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// 初始化保活功能
InitializeKeepAlive();
}
private void InitializeKeepAlive()
{
try
{
// 请求忽略电池优化
RequestIgnoreBatteryOptimization();
// 请求通知权限Android 13+
RequestNotificationPermission();
// 启动前台服务
StartHeartRateKeepAliveService();
System.Diagnostics.Debug.WriteLine("保活功能初始化完成");
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"InitializeKeepAlive Error: {ex.Message}");
}
}
private void RequestIgnoreBatteryOptimization()
{
try
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
var powerManager = GetSystemService(PowerService) as PowerManager;
if (powerManager != null && !powerManager.IsIgnoringBatteryOptimizations(PackageName))
{
var intent = new Intent(Settings.ActionRequestIgnoreBatteryOptimizations);
intent.SetData(Android.Net.Uri.Parse($"package:{PackageName}"));
StartActivityForResult(intent, BATTERY_OPTIMIZATION_REQUEST);
}
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"RequestIgnoreBatteryOptimization Error: {ex.Message}");
}
}
private void RequestNotificationPermission()
{
try
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu)
{
if (ContextCompat.CheckSelfPermission(this, Android.Manifest.Permission.PostNotifications)
!= Permission.Granted)
{
ActivityCompat.RequestPermissions(this,
new[] { Android.Manifest.Permission.PostNotifications },
NOTIFICATION_PERMISSION_REQUEST);
}
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"RequestNotificationPermission Error: {ex.Message}");
}
}
private void StartHeartRateKeepAliveService()
{
try
{
var intent = new Intent(this, typeof(HeartRateKeepAliveService));
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
StartForegroundService(intent);
}
else
{
StartService(intent);
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"StartHeartRateKeepAliveService Error: {ex.Message}");
}
}
protected override void OnResume()
{
base.OnResume();
// 每次应用恢复时检查服务状态
CheckServiceStatus();
}
private void CheckServiceStatus()
{
try
{
if (!IsServiceRunning(typeof(HeartRateKeepAliveService)))
{
System.Diagnostics.Debug.WriteLine("检测到服务未运行,正在重启...");
StartHeartRateKeepAliveService();
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"CheckServiceStatus Error: {ex.Message}");
}
}
private bool IsServiceRunning(System.Type serviceType)
{
try
{
var activityManager = GetSystemService(ActivityService) as ActivityManager;
var services = activityManager?.GetRunningServices(int.MaxValue);
if (services != null)
{
foreach (var service in services)
{
if (service.Service.ClassName.Contains(serviceType.Name))
{
return true;
}
}
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"IsServiceRunning Error: {ex.Message}");
}
return false;
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case NOTIFICATION_PERMISSION_REQUEST:
if (grantResults.Length > 0 && grantResults[0] == Permission.Granted)
{
System.Diagnostics.Debug.WriteLine("通知权限已授予");
}
else
{
System.Diagnostics.Debug.WriteLine("通知权限被拒绝");
}
break;
}
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case BATTERY_OPTIMIZATION_REQUEST:
System.Diagnostics.Debug.WriteLine($"电池优化请求结果: {resultCode}");
break;
}
}
}