B4A=true Group=Default Group ModulesStructureVersion=1 Type=Service Version=9.9 @EndOfDesignText@ #Region Service Attributes #StartAtBoot: True #ExcludeFromLibrary: True #StartCommandReturnValue: android.app.Service.START_STICKY #End Region Sub Process_Globals 'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules. Private Const STARTUP_DELAY As Long = 15000 '15 ثانیه تاخیر پس از بوت Private startupTimer As Timer Private retryCount As Int = 0 Private Const MAX_RETRY_COUNT As Int = 3 End Sub Sub Service_Create Try Log("StarterService created") 'تنظیم حالت foreground (برای اندروید 8+) Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'تایمر برای راه‌اندازی با تاخیر (اجازه دهید سیستم کامل بوت شود) startupTimer.Initialize("startupTimer", STARTUP_DELAY) 'شروع شمارش معکوس برای راه‌اندازی startupTimer.Enabled = True Catch Log("Error in Service_Create: " & LastException.Message) 'در صورت خطا، بعد از 30 ثانیه مجدداً تلاش کن StartServiceAt(Me, DateTime.Now + 30000, True) End Try End Sub Sub Service_Start (StartingIntent As Intent) Try Log("StarterService started with intent: " & StartingIntent.Action) 'اگر دستگاه تازه بوت شده، منتظر بمان و سپس اقدام کن If StartingIntent.HasExtra("android.intent.extra.BOOT_COMPLETED") Then Log("Boot completed received, waiting for system to stabilize...") 'کار خاصی نکن، startupTimer خودش کار را انجام می‌دهد End If 'برای اندروید 8+ ممکن است نیاز به Foreground Service داشته باشیم CheckAndroidVersionAndSetup 'راه‌اندازی تدریجی سرویس‌ها StartupSequence Catch Log("Error in Service_Start: " & LastException.Message) 'در صورت خطا، با افزایش تاخیر مجدداً تلاش کن retryCount = retryCount + 1 If retryCount <= MAX_RETRY_COUNT Then Dim delay As Long = retryCount * 30000 '30, 60, 90 ثانیه StartServiceAt(Me, DateTime.Now + delay, True) Log("Retry " & retryCount & " scheduled in " & delay/1000 & " seconds") End If End Try End Sub Sub startupTimer_Tick startupTimer.Enabled = False Try Log("Startup timer elapsed, initializing services...") 'بررسی اتصال اینترنت قبل از راه‌اندازی If CheckInternetConnection Then 'راه‌اندازی سرویس پیام‌رسانی InitializeFirebaseMessaging 'راه‌اندازی سرویس‌های دیگر اگر لازم است StartOtherServices Else Log("No internet connection, retrying in 1 minute...") 'اگر اینترنت نیست، بعد از 1 دقیقه مجدداً تلاش کن startupTimer.Interval = 60000 startupTimer.Enabled = True End If Catch Log("Error in startupTimer_Tick: " & LastException.Message) 'بعد از 2 دقیقه مجدداً تلاش کن startupTimer.Interval = 120000 startupTimer.Enabled = True End Try End Sub Sub CheckAndroidVersionAndSetup 'بررسی نسخه اندروید و تنظیمات مناسب Try Dim r As Reflector r.Target = r.GetStaticField("android.os.Build$VERSION", "SDK_INT") Dim sdkVersion As Int = r.GetField("SDK_INT") If sdkVersion >= 26 Then 'اندروید 8+ نیاز به Foreground Service دارد CreateForegroundNotification End If Log("Android SDK Version: " & sdkVersion) Catch Log("Error checking Android version: " & LastException.Message) End Try End Sub Sub CreateForegroundNotification 'ایجاد notification برای Foreground Service Try Dim n As Notification n.Initialize2(n.IMPORTANCE_LOW) n.Icon = "icon" n.SetInfo("سرویس", "در حال راه‌اندازی...", Main) n.Sound = False n.Vibrate = False n.Light = False Service.StartForeground(1, n) Log("Foreground notification created for Android 8+") Catch Log("Error creating foreground notification: " & LastException.Message) End Try End Sub Sub CheckInternetConnection As Boolean 'بررسی اتصال به اینترنت Try Dim p As Phone Dim state As String = p.GetDataState Return state.Contains("CONNECTED") Or state.Contains("CONNECTING") Catch Log("Error checking internet: " & LastException.Message) Return False End Try End Sub Sub InitializeFirebaseMessaging 'راه‌اندازی کنترل شده FirebaseMessaging Try Log("Initializing FirebaseMessaging...") 'ابتدا مطمئن شو سرویس در حال اجرا نیست If Not(IsServiceRunning("FirebaseMessaging")) Then StartService(FirebaseMessaging) Sleep(2000) '2 ثانیه صبر کن End If 'سابسکرایب کردن CallSubDelayed2(FirebaseMessaging, "SubscribeToTopics", 3000) Log("FirebaseMessaging initialized successfully") Catch Log("Error initializing FirebaseMessaging: " & LastException.Message) 'بعد از 30 ثانیه مجدداً تلاش کن startupTimer.Interval = 30000 startupTimer.Enabled = True End Try End Sub Sub IsServiceRunning(serviceName As String) As Boolean 'بررسی می‌کند که سرویس در حال اجرا است یا نه Try Dim r As Reflector Dim context As JavaObject context.InitializeContext Dim activityManager As JavaObject activityManager = context.RunMethodJO("getSystemService", Array("activity")) Dim runningServices As List runningServices = activityManager.RunMethodJO("getRunningServices", _ Array(100)).RunMethod("toArray", Null) For Each rs As JavaObject In runningServices Dim service As JavaObject = rs.RunMethodJO("service", Null) Dim className As String = service.GetField("className") If className.Contains(serviceName.ToLowerCase) Then Return True End If Next Return False Catch Log("Error checking service status: " & LastException.Message) Return False End Try End Sub Sub StartOtherServices 'راه‌اندازی سایر سرویس‌های مورد نیاز Try 'بررسی و راه‌اندازی سرویس‌های دیگر 'مثلاً سرویس‌های مونیتورینگ 'StartService(MonitoringService) 'اگر وجود دارد Catch Log("Error starting other services: " & LastException.Message) End Try End Sub Sub StartupSequence 'ترتیب هوشمند راه‌اندازی Try '1. ابتدا منتظر بمان سیستم کامل بالا بیاید Sleep(5000) '2. بررسی وضعیت باتری CheckBatteryAndAdjust '3. راه‌اندازی سرویس‌ها If Not(startupTimer.Enabled) Then startupTimer.Interval = 5000 startupTimer.Enabled = True End If Catch Log("Error in startup sequence: " & LastException.Message) End Try End Sub Sub CheckBatteryAndAdjust 'بررسی وضعیت باتری و تنظیم رفتار Try Dim bat As BatteryManager bat.Initialize If bat.Percent < 15 Then 'باتری خیلی کم - کاهش فعالیت startupTimer.Interval = 180000 '3 دقیقه Log("Low battery (" & bat.Percent & "%), slowing down startup") ElseIf Not(bat.Charging) And bat.Percent < 30 Then 'باتری کم و در حال شارژ نیست startupTimer.Interval = 120000 '2 دقیقه End If Catch Log("Error checking battery: " & LastException.Message) End Try End Sub Sub Service_TaskRemoved 'وقتی کاربر برنامه را از لیست اخیر حذف می‌کند Log("App removed from recent list") 'در اندروید جدید، ممکن است سرویس کشته شود 'پس راه‌اندازی مجدد را برنامه‌ریزی کن StartServiceAt(Me, DateTime.Now + 60000, True) 'بعد از 1 دقیقه End Sub 'Return true to allow the OS default exceptions handler to handle the uncaught exception. Sub Application_Error (Error As Exception, StackTrace As String) As Boolean Log("Unhandled error: " & Error.Message) Log("Stack trace: " & StackTrace) 'راه‌اندازی مجدد سرویس در صورت خطای بحرانی StartServiceAt(Me, DateTime.Now + 30000, True) Return True End Sub Sub Service_Destroy Try Log("StarterService destroyed") 'آزاد کردن منابع If startupTimer.IsInitialized Then startupTimer.Enabled = False End If 'برای اندروید 8+، foreground را متوقف کن Dim r As Reflector r.Target = r.GetStaticField("android.os.Build$VERSION", "SDK_INT") Dim sdkVersion As Int = r.GetField("SDK_INT") If sdkVersion >= 26 Then Service.StopForeground(True) End If 'راه‌اندازی مجدد برای اطمینان از ادامه کار 'اما فقط اگر تعداد تلاش‌ها از حد مجاز کمتر است If retryCount <= MAX_RETRY_COUNT Then StartServiceAt(Me, DateTime.Now + 120000, True) 'بعد از 2 دقیقه End If Catch Log("Error in Service_Destroy: " & LastException.Message) End Try End Sub