Skip to Content
ആമുഖംപ്ലാറ്റ്ഫോം സജ്ജീകരണംആൻഡ്രോയിഡ് SDK

Android SDK: ബാറ്ററി മാനേജരെ മെരുക്കുന്നു

പശ്ചാത്തല സേവനങ്ങളെ ആക്രമണാത്മകമായി ഇല്ലാതാക്കുന്നതിൽ ആൻഡ്രോയിഡ് കുപ്രസിദ്ധമാണ്. ചൈനീസ് OEM-കളിൽ (Xiaomi, Huawei പോലുള്ളവ) സാധാരണ Android പശ്ചാത്തല നിർവ്വഹണ പരിധികൾ പൂർണ്ണമായും ലംഘിക്കുന്ന ഇഷ്‌ടാനുസൃത പവർ മാനേജർമാരുണ്ട്.

ഈ പേജ് എന്തുകൊണ്ട് ആൻഡ്രോയിഡ് നിങ്ങളുടെ ആപ്പിനെ ഇല്ലാതാക്കുന്നു എന്നും എങ്ങനെ ട്രെയ്‌സ്‌ലെറ്റിൻ്റെ നിർദ്ദിഷ്ട Android കോൺഫിഗറേഷനുകൾ യഥാർത്ഥ ലോകത്ത് അത് പരിഹരിക്കുന്നു.


ഓപ്ഷണൽ ഡിപൻഡൻസി: ഉയർന്ന കൃത്യതയുള്ള GMS ലൊക്കേഷൻ

Tracelet-ൻ്റെ Android SDK-ന് Google Play സേവനങ്ങളുടെ സ്ഥാനം ഉപയോഗിക്കാം — FusedLocationProviderClient (മികച്ച കൃത്യതയും ബാറ്ററിയും), ഹാർഡ്‌വെയർ ആക്‌റ്റിവിറ്റി തിരിച്ചറിയൽ (നടത്തം / ഡ്രൈവിംഗ് / ഇപ്പോഴും), ഹാർഡ്‌വെയർ ജിയോഫെൻസിംഗ്. SDK ഭാരം കുറഞ്ഞതും Google-ലെസ് ഉപകരണങ്ങളിൽ ഉപയോഗിക്കാവുന്നതുമാക്കി നിലനിർത്താൻ, ഇത് ആശ്രിതത്വം ബണ്ടിൽ ചെയ്തിട്ടില്ല. നിങ്ങൾക്ക് ഉയർന്ന കൃത്യതയുള്ള പാത വേണമെങ്കിൽ മാത്രം നിങ്ങൾ അത് ചേർക്കുക:

// android/app/build.gradle.kts dependencies { implementation("com.google.android.gms:play-services-location:21.3.0") }

ഇത് ഓപ്ഷണൽ ആണ്, SDK ഭംഗിയായി തരംതാഴ്ത്തുന്നു. play-services-location ഇല്ലാതെ, Tracelet സാധാരണ AOSP LocationManager (പ്ലെയിൻ GPS) ലേക്ക് തിരികെ വരുന്നു. ട്രാക്കിംഗ് ഇപ്പോഴും പ്രവർത്തിക്കുന്നു - നിങ്ങൾ മാത്രം സംയോജിപ്പിച്ച ദാതാവിൻ്റെ കൃത്യത/ബാറ്ററി ആനുകൂല്യങ്ങൾ, ഹാർഡ്‌വെയർ പ്രവർത്തന തിരിച്ചറിയൽ, ഹാർഡ്‌വെയർ എന്നിവ നഷ്ടപ്പെടും ജിയോഫെൻസിംഗ്. ശുപാർശ ചെയ്‌തത്: നിങ്ങൾ പ്രത്യേകമായി Google-ലെസ് / AOSP ഉപകരണങ്ങളെ ടാർഗെറ്റ് ചെയ്യുന്നില്ലെങ്കിൽ ഇത് ചേർക്കുക (ഉദാ. GMS ഇല്ലാത്ത Huawei, അല്ലെങ്കിൽ ഡീ-ഗൂഗിൾഡ് റോമുകൾ).

മിനിമം പതിപ്പ്: 21.2.0. ട്രേസ്‌ലെറ്റിൻ്റെ ആൻഡ്രോയിഡ് കോഡ് ഇൻ്റർഫേസ് അധിഷ്‌ഠിതമായി വിളിക്കുന്നു FusedLocationProviderClient, ActivityRecognitionClient API-കൾ, അത് മാത്രമായി play-services-location 21.2.0 എന്നതിലെ ഇൻ്റർഫേസുകൾ. പഴയ റിലീസുകൾ (ഉദാ. 19.0.0) ഇവ അയയ്ക്കുന്നു കോൺക്രീറ്റ് ക്ലാസുകളായി, അതിനാൽ അവയിലേക്ക് വിളിക്കുന്നത് എറിയുന്നു റൺടൈമിൽ java.lang.IncompatibleClassChangeError. Tracelet ഒരു Gradle പ്രസിദ്ധീകരിക്കുന്നു play-services-location-നെ 21.2.0+-ലേക്ക് സ്വയമേവ ഉയർത്തുന്ന ആശ്രിതത്വം നിയന്ത്രണം മറ്റൊരു ഡിപൻഡൻസി പഴയ പതിപ്പിലേക്ക് വലിച്ചിടുന്നു, എന്നാൽ നിങ്ങൾ സ്വയം പതിപ്പ് പിൻ ചെയ്യുകയാണെങ്കിൽ, അത് നിലനിർത്തുക 21.2.0 അല്ലെങ്കിൽ പുതിയത് (ഞങ്ങൾ 21.3.0 ശുപാർശ ചെയ്യുന്നു).

play-services-location ഉപയോഗിച്ച്അതില്ലാതെ (AOSP ഫാൾബാക്ക്)
ഫ്യൂസ്ഡ് ലൊക്കേഷൻ (മികച്ച കൃത്യത + ബാറ്ററി)LocationManager വഴി റോ ജിപിഎസ് / നെറ്റ്‌വർക്ക്
ഹാർഡ്‌വെയർ ആക്‌റ്റിവിറ്റി തിരിച്ചറിയൽ (onActivityChange)ആക്സിലറോമീറ്റർ മാത്രം ചലനം കണ്ടെത്തൽ
ഹാർഡ്‌വെയർ ജിയോഫെൻസിംഗ്സോഫ്‌റ്റ്‌വെയർ (ഇൻ-എസ്‌ഡികെ) ജിയോഫെൻസ് മൂല്യനിർണ്ണയം

ഓപ്ഷണൽ ഡിപൻഡൻസി: പ്ലേ ഇൻ്റഗ്രിറ്റി (ഉപകരണ സാക്ഷ്യപ്പെടുത്തൽ)

നിങ്ങൾ Tracelet-ൻ്റെ ഉപകരണ അറ്റസ്റ്റേഷൻ ഫീച്ചർ (AttestationConfig) ഉപയോഗിക്കുകയാണെങ്കിൽ, ആൻഡ്രോയിഡ് Google Play ഇൻ്റഗ്രിറ്റി വഴി സൈഡ് അതിൻ്റെ ക്രിപ്‌റ്റോഗ്രാഫിക് ടോക്കൺ സൃഷ്ടിക്കുന്നു. പോലെ തന്നെ play-services-location, ഈ ആശ്രിതത്വം ബണ്ടിൽ ചെയ്തിട്ടില്ല — നിങ്ങൾ അത് ചേർക്കുമ്പോൾ മാത്രം സാക്ഷ്യപ്പെടുത്തൽ പ്രവർത്തനക്ഷമമാക്കുക:

// android/app/build.gradle.kts dependencies { implementation("com.google.android.play:integrity:1.6.0") }

ഇത് ഓപ്ഷണൽ ആണ്, അറ്റസ്റ്റേഷൻ ഭംഗിയായി തരംതാഴ്ത്തുന്നു. Play ഇൻ്റഗ്രിറ്റി ഇല്ലാതെ ആശ്രിതത്വം, Tracelet-ലെ മറ്റെല്ലാം സാധാരണയായി പ്രവർത്തിക്കുന്നു - സാക്ഷ്യപ്പെടുത്തൽ മാത്രമേ ബാധിക്കുകയുള്ളൂ: AttestationConfig(enabled: true) ഒരു മുന്നറിയിപ്പും Tracelet.getAttestationToken() ഉം രേഖപ്പെടുത്തുന്നു ക്രാഷുചെയ്യുന്നതിനുപകരം ഒരു ടോക്കണിന് പകരം null നൽകുന്നു. നിങ്ങളാണെങ്കിൽ മാത്രം ആശ്രിതത്വം ചേർക്കുക സാക്ഷ്യപ്പെടുത്തൽ പ്രവർത്തനക്ഷമമാക്കുകയും Android-ൽ Play ഇൻ്റഗ്രിറ്റി വിധി ആവശ്യമാണ്. കാണുക ഉപകരണ അറ്റസ്റ്റേഷൻ ഗൈഡ്  പൂർണ്ണമായ വർക്ക്ഫ്ലോയ്ക്കും സെർവർ-സൈഡ് പരിശോധനയ്ക്കും.

ഇത് implementation ആയിരിക്കണം, compileOnly അല്ല. പ്ലേ ഇൻ്റഗ്രിറ്റി ഉള്ളിൽ compileOnly ആണ് Tracelet SDK (അതിനാൽ അറ്റസ്റ്റേഷൻ ഉപയോഗിക്കാത്ത ആപ്പുകളിൽ ഇത് ഒരിക്കലും ഷിപ്പ് ചെയ്യുകയോ നിർബന്ധിക്കുകയോ ചെയ്യില്ല). എങ്കിൽ നിങ്ങളുടെ ആപ്പ് മൊഡ്യൂളിലേക്ക് ഡിപൻഡൻസി ചേർക്കാതെ നിങ്ങൾ സാക്ഷ്യപ്പെടുത്തൽ പ്രവർത്തനക്ഷമമാക്കുന്നു implementation, റൺടൈമിൽ ക്ലാസുകൾ ഇല്ല, അറ്റസ്റ്റേഷൻ നിശബ്ദമായി null നൽകുന്നു.


അനുമതികളും മാനിഫെസ്റ്റ് സജ്ജീകരണവും

നിങ്ങളുടെ ആപ്പ് കംപൈൽ ചെയ്യുമ്പോൾ Tracelet നിങ്ങളുടെ AndroidManifest.xml-ലേക്ക് ആവശ്യമായ അനുമതികൾ സ്വയമേവ കുത്തിവയ്ക്കുന്നു. സ്ഥിരസ്ഥിതിയായി, ഇത് അഭ്യർത്ഥിക്കുന്നു:

  • ACCESS_COARSE_LOCATION & ACCESS_FINE_LOCATION (ട്രാക്കിംഗിന് ആവശ്യമാണ്)
  • ACCESS_BACKGROUND_LOCATION (ആപ്പ് അടയ്‌ക്കുമ്പോൾ ട്രാക്കുചെയ്യുന്നതിന് ആവശ്യമാണ്)
  • FOREGROUND_SERVICE & FOREGROUND_SERVICE_LOCATION (തുടർച്ചയായ പശ്ചാത്തല നിർവ്വഹണത്തിന് ആവശ്യമാണ്)
  • ACTIVITY_RECOGNITION (സ്മാർട്ട് മോഷൻ ഡിറ്റക്ഷൻ എഞ്ചിന് ആവശ്യമാണ്)
  • POST_NOTIFICATIONS (Android 13+ ഫോർഗ്രൗണ്ട് സർവീസ് UI-ന് ആവശ്യമാണ്)
  • SCHEDULE_EXACT_ALARM (കൃത്യമായ ആനുകാലിക മോഡ് ട്രാക്കിംഗിന് ആവശ്യമാണ്)

ഉപയോഗിക്കാത്ത അനുമതികൾ നീക്കം ചെയ്യുന്നു (മാനിഫെസ്റ്റ് ലയനം)

നിങ്ങളുടെ ആപ്പിന് ഒരു നിർദ്ദിഷ്‌ട ഫീച്ചർ ആവശ്യമില്ലെങ്കിൽ (ഉദാഹരണത്തിന്, നിങ്ങളുടെ ക്ലയൻ്റിന് ചലനം കണ്ടെത്തൽ ആവശ്യമില്ല, അല്ലെങ്കിൽ നിങ്ങൾ ആനുകാലിക മോഡ് ഉപയോഗിക്കുന്നില്ല), നിങ്ങളുടെ ആപ്പ്-ലെവൽ AndroidManifest.xml (android/app/src/main/AndroidManifest.xml) എന്നതിലെ ആൻഡ്രോയിഡിൻ്റെ മാനിഫെസ്റ്റ് ലയന tools:node="remove" നിർദ്ദേശം ഉപയോഗിച്ച് നിങ്ങൾക്ക് നിർബന്ധമായും അനുമതി നീക്കം ചെയ്യാം.

ട്രെയ്‌സ്‌ലെറ്റിൻ്റെ നേറ്റീവ് കോഡ് checkSelfPermission() ഉപയോഗിച്ച് പൂർണ്ണമായും സംരക്ഷിച്ചിരിക്കുന്നു. നഷ്‌ടമായ അനുമതികൾ ക്രാഷുകളല്ല, മനോഹരമായ ഫാൾബാക്കുകളെ ട്രിഗർ ചെയ്യും.

അനുമതിനീക്കം ചെയ്യുമ്പോൾ പ്രഭാവം (tools:node="remove")
ACTIVITY_RECOGNITIONസുരക്ഷിതം. അടിസ്ഥാന ആക്‌സിലറോമീറ്റർ മാത്രമുള്ള ചലനം കണ്ടെത്തലിലേക്ക് മടങ്ങുന്നു. onActivityChange സ്ട്രീം ഫയർ ചെയ്യില്ല (നടത്തം/ഓട്ടം/ഡ്രൈവിംഗ് വർഗ്ഗീകരണം ഇല്ല).
ACCESS_BACKGROUND_LOCATIONസുരക്ഷിതം. ആപ്പ് പൂർണ്ണമായും പശ്ചാത്തലത്തിലായിരിക്കുമ്പോഴോ സ്വൈപ്പ് ചെയ്യുമ്പോഴോ Android 10+ ട്രാക്കിംഗ് നിയന്ത്രിക്കും.
SCHEDULE_EXACT_ALARMസുരക്ഷിതം. ആനുകാലിക മോഡ് ബാറ്ററി-ഫ്രണ്ട്ലി, എന്നാൽ കൃത്യതയില്ലാത്ത, വർക്ക്മാനേജർ ടൈമറുകൾ ഉപയോഗിക്കുന്നതിലേക്ക് മടങ്ങുന്നു.
POST_NOTIFICATIONSസുരക്ഷിതം. ഫോർഗ്രൗണ്ട് സേവന സ്ഥിരമായ അറിയിപ്പ് Android 13+-ൽ മറച്ചിരിക്കുന്നു. സർവീസ് ഇപ്പോഴും നടക്കുന്നു.
REQUEST_IGNORE_BATTERY_OPTIMIZATIONSസുരക്ഷിതം. നിങ്ങൾക്ക് OS-ൽ നിന്ന് ബാറ്ററി ഒപ്റ്റിമൈസേഷൻ ഇളവുകൾ അഭ്യർത്ഥിക്കാൻ കഴിയില്ല.
FOREGROUND_SERVICE / FOREGROUND_SERVICE_LOCATIONജിയോഫെൻസ് മാത്രമുള്ള / ആനുകാലികമായി മാത്രമുള്ള ആപ്പുകൾക്ക് സുരക്ഷിതം. അവ നീക്കം ചെയ്യുന്നത് തുടർച്ചയായ ഫോർഗ്രൗണ്ട് ട്രാക്കിംഗ് (start()) പ്രവർത്തനരഹിതമാക്കുന്നു, എന്നാൽ സ്റ്റാൻഡേർഡ് ജിയോഫെൻസിംഗും ആനുകാലിക മോഡും പ്രവർത്തിക്കുന്നത് തുടരും. തുടർച്ചയായ പശ്ചാത്തല ട്രാക്കിംഗിന് ആവശ്യമാണ്.
ACCESS_FINE_LOCATION / COARSEസുരക്ഷിതമല്ല. ലൊക്കേഷൻ അനുമതിയില്ലാതെ, ട്രേസ്‌ലെറ്റിന് സ്ഥാനങ്ങൾ നേടാനാവില്ല

Google Play ഫോർഗ്രൗണ്ട്-സേവന നയം (2026 ഒക്ടോബർ 28 മുതൽ പ്രാബല്യത്തിൽ വരും). ജിയോഫെൻസിംഗ് ആണ് ഫോർഗ്രൗണ്ട് സർവീസ് ലൊക്കേഷനായി ഇനി ഒരു അനുവദനീയമായ ഉപയോഗ കേസ്. നിങ്ങളുടെ ആപ്പ് എ ഉപയോഗിക്കുകയാണെങ്കിൽ ജിയോഫെൻസിംഗിനായി മുൻവശത്തെ സേവനം മാത്രം, നിങ്ങൾ നീക്കം ചെയ്യണം നിങ്ങൾ ലയിപ്പിച്ചതിൽ നിന്ന് FOREGROUND_SERVICE_LOCATION (ഒപ്പം FOREGROUND_SERVICE). പ്രകടമായത്. ട്രേസ്‌ലെറ്റിൻ്റെ സ്റ്റാൻഡേർഡ് ജിയോഫെൻസ് മോഡ് നേറ്റീവ് ജിയോഫെൻസ് API ഉപയോഗിക്കുന്നു അല്ല ഒരു ഫോർഗ്രൗണ്ട് സേവനം ആരംഭിക്കുക, അതിനാൽ ജിയോഫെൻസ് മാത്രമുള്ള ആപ്പുകൾ കംപ്ലയിൻ്റാണ് - വെറും താഴെയുള്ള അനുമതികൾ ഒഴിവാക്കി foregroundService.enabled = false ആയി സൂക്ഷിക്കുക. കാണുക ജിയോഫെൻസിംഗ് ഗൈഡ് വിശദാംശങ്ങൾക്ക്.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- Geofence-only / periodic-only app: no continuous foreground tracking --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" tools:node="remove" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" tools:node="remove" /> </manifest>

ഉദാഹരണം: ചലനവും പശ്ചാത്തല അനുമതികളും നീക്കംചെയ്യുന്നു

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- Client doesn't want Activity/Motion tracking --> <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" tools:node="remove" /> <!-- Client only wants foreground tracking --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove" /> <!-- Remove Exact Alarms --> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" tools:node="remove" /> </manifest>

ഓട്ടോമാറ്റിക് പ്രോഗാർഡ് / R8 നിയമങ്ങൾ

പശ്ചാത്തല കോട്‌ലിൻ സേവനങ്ങൾ, റസ്റ്റ് കോറിനായുള്ള ജെഎൻഎ ബൈൻഡിംഗുകൾ, പ്രതിഫലിക്കുന്ന പിജിയൺ ചാനലുകൾ എന്നിവ ട്രെയ്‌സ്‌ലെറ്റ് വളരെയധികം ഉപയോഗിക്കുന്നു. ഇവ അവ്യക്തമാകുകയോ തെറ്റായി ചുരുങ്ങുകയോ ചെയ്താൽ, റിലീസിനായി നിങ്ങളുടെ ആപ്പ് കംപൈൽ ചെയ്യുമ്പോൾ പശ്ചാത്തല ട്രാക്കിംഗ് നിശബ്ദമായി പരാജയപ്പെടും.

ട്രേസ്‌ലെറ്റിനായി നിങ്ങൾ സ്വമേധയാ ProGuard കോൺഫിഗർ ചെയ്യേണ്ടതില്ല.

tracelet_android പ്ലഗിൻ ഉൾച്ചേർത്ത consumer-rules.pro ഉപയോഗിച്ച് യാന്ത്രികമായി അയയ്ക്കുന്നു. റിലീസ് മോഡിൽ നിങ്ങളുടെ Flutter ആപ്പ് നിർമ്മിക്കുമ്പോൾ, Android-ൻ്റെ R8 ഷ്രിങ്കർ ഈ നിയമങ്ങൾ സ്വയമേവ എക്‌സ്‌ട്രാക്‌റ്റ് ചെയ്യുകയും ആവശ്യമായ എല്ലാ ക്ലാസുകളും (HeadlessTaskService, BootReceiver, Rust uniffi ബൈൻഡിംഗുകൾ എന്നിവ പോലുള്ളവ) ചുരുങ്ങുന്നത് നിലനിൽക്കുമെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നു.


രംഗം 1: ഡെലിവറി ഡ്രൈവർ (തുടർച്ചയായ ട്രാക്കിംഗ്)

ആശയങ്ങൾ പര്യവേക്ഷണം ചെയ്‌തു: ഡോസ് മോഡ്, ഫോർഗ്രൗണ്ട് സേവനങ്ങൾ, വേക്ക്‌ലോക്കുകൾ

പ്രശ്നം

നിങ്ങളുടെ ഉപയോക്താവ് ഒരു പിസ്സ ഡെലിവറി ഡ്രൈവറാണ്. സ്‌ക്രീൻ ഓഫാക്കി അവർ ഫോൺ പോക്കറ്റിൽ ഇട്ടു. 15 മിനിറ്റിനു ശേഷം, ആൻഡ്രോയിഡ് ഡോസ് മോഡിൽ പ്രവേശിക്കുന്നു. ഇത് നെറ്റ്‌വർക്ക് ആക്‌സസ് അവസാനിപ്പിക്കുകയും പശ്ചാത്തല ജോലികൾ മാറ്റിവയ്ക്കുകയും ബാറ്ററി ലാഭിക്കുന്നതിന് സിപിയു വേക്ക്-അപ്പുകളെ ഗുരുതരമായി പരിമിതപ്പെടുത്തുകയും ചെയ്യുന്നു. ജിപിഎസ് ലഭിക്കുന്നതിന് നിങ്ങളുടെ ആപ്പ് ഒരു ലളിതമായ ടൈമറിനെ ആശ്രയിക്കുകയാണെങ്കിൽ, നിങ്ങളുടെ ടൈമർ പ്രവർത്തിപ്പിക്കാൻ ആൻഡ്രോയിഡ് വിസമ്മതിക്കും.

ട്രേസ്‌ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു: ഫോർഗ്രൗണ്ട് സേവനം

ഒരു ഫോർഗ്രൗണ്ട് സേവനം Android-നോട് പറയുന്നു: “ഹേയ്, ഞാൻ ഇപ്പോൾ അവിശ്വസനീയമാംവിധം പ്രധാനപ്പെട്ട ഒരു കാര്യം ചെയ്യുന്നു, ഉപയോക്താവിന് അതിനെക്കുറിച്ച് പൂർണ്ണമായി അറിയാം. എന്നെ കൊല്ലരുത്.”

android: tl.AndroidConfig( foregroundService: tl.ForegroundServiceConfig( enabled: true, channelName: 'Delivery Tracking', notificationText: 'Tracking your route to the customer', notificationOngoing: true, // User cannot swipe it away showNotificationOnPauseOnly: false, // Auto-hides when app is open actions: ['Pause', 'Complete'], // Adds interactive buttons to the notification ), )

സ്റ്റാറ്റസ് ബാറിൽ സ്ഥിരമായ ഒരു അറിയിപ്പ് കാണിക്കുന്നതിലൂടെ, Tracelet നിങ്ങളുടെ ആപ്പിൻ്റെ മുൻഗണനയെ ഫോർഗ്രൗണ്ട് UI-യുടെ ഏതാണ്ട് നിലയിലേക്ക് ഉയർത്തുന്നു. ഡോസ് മോഡ് നിയന്ത്രണങ്ങൾ മറികടന്ന്, ആൻഡ്രോയിഡ് ട്രെയ്‌സ്‌ലെറ്റ് അനിശ്ചിതമായി പ്രവർത്തിക്കാൻ അനുവദിക്കും.

അറിയിപ്പ് രൂപഭാവം ഇഷ്ടാനുസൃതമാക്കുന്നു

സ്ഥിരമായ അറിയിപ്പ് നിങ്ങളുടെ ആപ്പിൻ്റെ ബ്രാൻഡിംഗുമായി പൊരുത്തപ്പെടുത്തുന്നതിന്, നിങ്ങൾക്ക് ഐക്കണുകളും നിറങ്ങളും ഇഷ്ടാനുസൃതമാക്കാം:

android: tl.AndroidConfig( foregroundService: tl.ForegroundServiceConfig( enabled: true, notificationTitle: 'Delivery Mode', notificationText: 'Tracking your route...', notificationColor: '#0F9D58', // Your brand hex color notificationSmallIcon: 'ic_tracelet_icon', // The icon name notificationLargeIcon: 'ic_large_logo', ), )

പ്രധാന ഐക്കൺ നിയമങ്ങൾ:

  1. ഫയൽ ലൊക്കേഷൻ: ഇമേജ് ഫയൽ നിങ്ങളുടെ ആൻഡ്രോയിഡ് പ്രോജക്റ്റിൻ്റെ ഡ്രോയബിൾ ഫോൾഡറിൽ (android/app/src/main/res/drawable/ic_tracelet_icon.png) സ്ഥാപിക്കണം.
  2. ചെറിയ ഐക്കൺ നിയന്ത്രണങ്ങൾ: ആൻഡ്രോയിഡിന് notificationSmallIcon പൂർണ്ണമായും പരന്നതും സുതാര്യവും വെളുപ്പ് മാത്രം ആയിരിക്കണം. നിങ്ങൾ ഒരു നിറമുള്ള ലോഗോ ഉപയോഗിക്കുകയാണെങ്കിൽ, Android അതിനെ കട്ടിയുള്ള ചാരനിറമോ വെള്ളയോ ആയ ചതുരാകൃതിയിൽ റെൻഡർ ചെയ്യും.
  3. കളർ പ്രോപ്പർട്ടി: notificationColor പ്രോപ്പർട്ടി നിങ്ങളുടെ ബ്രാൻഡുമായി പൊരുത്തപ്പെടുന്നതിന് നിങ്ങളുടെ ചെറിയ ഐക്കണിൻ്റെ പശ്ചാത്തലം ടിൻ്റ് ചെയ്യും.
🔔

Android 13+ കുറിപ്പ്: സേവനം ആരംഭിക്കുന്നതിന് മുമ്പ് നിങ്ങൾ POST_NOTIFICATIONS അനുമതി അഭ്യർത്ഥിക്കണം, അല്ലാത്തപക്ഷം അറിയിപ്പ് OS നിശ്ശബ്ദമായി അടിച്ചമർത്തപ്പെടും. നിങ്ങളുടെ ഡാർട്ട് കോഡിൽ നിന്ന് ഇത് എങ്ങനെ അഭ്യർത്ഥിക്കാം എന്നറിയാൻ Flutter SDK: അനുമതികൾ പേജ് കാണുക.

ട്രാക്ക് ചെയ്യുമ്പോൾ അറിയിപ്പ് പുതുക്കുന്നു (updateNotification())

ട്രാക്കിംഗ് ആരംഭിച്ചതിന് ശേഷം *അറിയിപ്പ് മാറ്റേണ്ടതുണ്ട് - ഉദാ. “വഴിയിൽ” എന്നതിൽ നിന്ന് “എത്തുന്നു” എന്നതിലേക്ക് ശീർഷകം അപ്‌ഡേറ്റ് ചെയ്യണോ, ടെക്‌സ്‌റ്റ് സ്വാപ്പ് ചെയ്യണോ അതോ യാത്രയുടെ മധ്യത്തിൽ ആക്ഷൻ ബട്ടണുകൾ മാറ്റണോ? ഒരു പുതിയ ForegroundServiceConfig ഉപയോഗിച്ച് setConfig() എന്ന് വിളിക്കുന്നത് മൂല്യങ്ങൾ നിലനിൽക്കും, എന്നാൽ ഒരു അറിയിപ്പ്-മാത്രം മാറ്റം അല്ല Android ഇതിനകം കാണിക്കുന്ന അറിയിപ്പ് റീപോസ്‌റ്റ് ചെയ്യില്ല - ബന്ധമില്ലാത്ത സേവനം പുനരാരംഭിച്ചതിനോ ഫോർഗ്രൗണ്ട് പരിവർത്തനത്തിനോ ശേഷം മാത്രമേ പുതിയ ഉള്ളടക്കം ദൃശ്യമാകൂ.

v3.6.8 മുതൽ, Tracelet.updateNotification() തത്സമയ അറിയിപ്പ് പുതുക്കിയെടുക്കുന്നു, ട്രാക്കിംഗ് പൈപ്പ്‌ലൈൻ പുനരാരംഭിക്കാതെ:

// 1. Apply the new notification content. await Tracelet.setConfig( const tl.Config( android: tl.AndroidConfig( foregroundService: tl.ForegroundServiceConfig( notificationTitle: 'Arriving', notificationText: 'Your driver is 2 minutes away', ), ), ), ); // 2. Repost the active notification with the new content. await Tracelet.updateNotification();

രൂപകൽപന പ്രകാരം സുരക്ഷിതം. updateNotification() ഒരിക്കലും ട്രാക്കിംഗ് പുനരാരംഭിക്കുന്നില്ല, കൂടാതെ ഫോർഗ്രൗണ്ട് സേവനം നിലവിൽ പ്രവർത്തിക്കാത്തപ്പോൾ ഇതൊരു നോ-ഓപ്പാണ് (പുതുക്കാൻ ഒന്നുമില്ല). iOS-ൽ അത് പ്രവർത്തിക്കുന്ന തത്സമയ പ്രവർത്തനം പകരം പുതുക്കുന്നു (നിങ്ങൾ liveActivityConfig വഴി ഒരെണ്ണം തിരഞ്ഞെടുത്തപ്പോൾ); വെബിൽ ഇതൊരു നോ-ഓപ് ആണ് - അതിനാൽ എല്ലാ പ്ലാറ്റ്‌ഫോമിലും ഒരേ കോൾ സുരക്ഷിതമാണ്.


സാഹചര്യം 2: കാലാവസ്ഥ ആപ്പ് (ആനുകാലിക ട്രാക്കിംഗ്)

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: വർക്ക് മാനേജർ വേഴ്സസ്. കൃത്യമായ അലാറങ്ങൾ

പ്രശ്നം

നിങ്ങളുടെ ഉപയോക്താവ് നിങ്ങളുടെ പ്രാദേശിക കാലാവസ്ഥാ ആപ്പ് ഡൗൺലോഡ് ചെയ്തു. ഓരോ 4 മണിക്കൂറിലും ഒരിക്കൽ നിങ്ങൾ പശ്ചാത്തലത്തിൽ ഉണരുകയും അവരുടെ ലൊക്കേഷൻ നേടുകയും പ്രാദേശിക പ്രവചനം ഡൗൺലോഡ് ചെയ്യുകയും വേണം.

നിങ്ങൾക്ക് സ്ഥിരമായ ഒരു ഫോർഗ്രൗണ്ട് സേവന അറിയിപ്പ് ആവശ്യമില്ല. ഉപയോക്താവ് അവരുടെ ഡ്രോയറിൽ സ്ഥിരമായ “കാലാവസ്ഥ ട്രാക്കിംഗ്” അറിയിപ്പ് കാണുന്നത് വെറുക്കും.

ട്രേസ്ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു: ആനുകാലിക മോഡ്

തുടർച്ചയായ സേവനത്തിനുപകരം, ട്രെയ്‌സ്‌ലെറ്റിന് Android-ൻ്റെ ജോബ് ഷെഡ്യൂളറുകൾ ഉപയോഗിച്ച് അൽപ്പനേരം ഉണരാനും പരിഹാരം കാണാനും ഉറങ്ങാനും കഴിയും.

android: tl.AndroidConfig( periodicUseForegroundService: false, periodicUseExactAlarms: true, // Uses AlarmManager instead of WorkManager )

രണ്ട് ഷെഡ്യൂളർമാർ

  1. വർക്ക് മാനേജർ (periodicUseExactAlarms: false) സ്ഥിരസ്ഥിതി. ഇത് വളരെ ബാറ്ററി ഫ്രണ്ട്ലി ആണ്. എന്നിരുന്നാലും, അത് എപ്പോൾ പ്രവർത്തിപ്പിക്കണമെന്ന് Android തീരുമാനിക്കുന്നു. ഓരോ 15 മിനിറ്റിലും റൺ ചെയ്യാൻ നിങ്ങളോട് ആവശ്യപ്പെടുകയാണെങ്കിൽ, ആൻഡ്രോയിഡ് 45 മിനിറ്റ് കാത്തിരിക്കുകയും ഇൻസ്റ്റാഗ്രാം (“ബാച്ചിംഗ്” എന്ന് വിളിക്കപ്പെടുന്ന) പരിശോധിക്കുന്നതിനായി ഉപയോക്താവ് അവരുടെ ഫോൺ അൺലോക്ക് ചെയ്യുമ്പോൾ അത് പ്രവർത്തിപ്പിക്കുകയും ചെയ്തേക്കാം. ഇത് വളരെ കൃത്യതയില്ലാത്തതാണ്.

  2. അലാറം മാനേജർ (നോട്രാൻസ്0 ലേറ്റ്) നിങ്ങൾ ഒരു നിശ്ചിത സമയത്ത് ഉപകരണം കൃത്യമായി ഉണർത്തേണ്ടതുണ്ടെങ്കിൽ, ഇത് ഉപയോഗിക്കുക. നിങ്ങളുടെ android/app/src/main/AndroidManifest.xml-ൽ SCHEDULE_EXACT_ALARM അനുമതി പ്രഖ്യാപിക്കാൻ ഇത് ആവശ്യപ്പെടുന്നു:

    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

ശ്രദ്ധിക്കുക: Google Play ഈ അനുമതി കർശനമായി അവലോകനം ചെയ്യുന്നു. നിങ്ങളുടെ ആപ്പ് ഒരു അലാറം ക്ലോക്കോ കലണ്ടറോ അല്ലെങ്കിൽ കൃത്യമായ സമയക്രമീകരണമോ ആണെങ്കിൽ മാത്രം അത് ഉപയോഗിക്കുക.


രംഗം 3: OEM ആക്രമണം

ആശയങ്ങൾ പര്യവേക്ഷണം ചെയ്‌തു: ക്രമീകരണ ആരോഗ്യ API

പ്രശ്നം

നിങ്ങൾ എല്ലാം ശരിയായി ചെയ്തു. നിങ്ങൾക്ക് ഒരു ഫോർഗ്രൗണ്ട് സേവനമുണ്ട്. എന്നാൽ ഉപയോക്താവിന് Xiaomi ഫോൺ ഉണ്ട്. MIUI-ന് 5 മിനിറ്റ് സ്‌ക്രീൻ-ഓഫ് സമയത്തിന് ശേഷം ഫോർഗ്രൗണ്ട് സേവനങ്ങളെപ്പോലും നിർബന്ധിതമായി കൊല്ലുന്ന “ബാറ്ററി സേവർ” ഉണ്ട്.

ട്രേസ്‌ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു: യാന്ത്രിക ലഘൂകരണവും നിർദ്ദേശങ്ങളും

സാധ്യമാകുന്നിടത്ത് Tracelet സ്വയമേവ ആന്തരിക ലഘൂകരണങ്ങൾ പ്രയോഗിക്കുന്നു, എന്നാൽ ചിലപ്പോൾ ഉപയോക്താവിന് OEM-ൻ്റെ പ്രൊപ്രൈറ്ററി ക്രമീകരണ മെനുവിൽ നിങ്ങളുടെ ആപ്പ് വൈറ്റ്‌ലിസ്റ്റ് ചെയ്യേണ്ടിവരും.

final health = await tl.Tracelet.getSettingsHealth(); if (health['isAggressiveOem'] == true) { // Automatically opens the manufacturer-specific settings screen // (e.g. Xiaomi Autostart, Huawei App Launch, Samsung Sleeping Apps) await tl.Tracelet.showPowerManager(); }

നിങ്ങളുടെ Flutter UI-ൽ ഇത് എങ്ങനെ നടപ്പിലാക്കാം എന്നതിൻ്റെ വിശദമായ ഉദാഹരണത്തിനായി, ഡയഗ്നോസ്റ്റിക് ടൂൾസ് & പവർ മാനേജ്മെൻ്റ് പേജ് കാണുക.