Hogyan szerezzük be az ujj aktuális pozícióját a képernyőn megjelenő gesztusokon - tűz majom a-tól i-ig
A hatóságok elvetették a feladatot, de nem egyszerűen. Az alkalmazásnak a háttérben monitorozni kell a gps-eket, adatokat kell gyűjtenie az akkumulátorról, naplózni, majd be kell illesztenie a kiszolgálóra. Mindez könyörtelenül fogyasztja az akkumulátort, megértem, de a hatóságoknak ezt az opciót kell alkalmazniuk. Fordulok a kérdésekhez:
1.Nuzhno látta a szolgáltatást, de a korábbi témák alapján - az időzítő nem működik, a csúszkák nem lehetnek opciók, hogyan lehet a szolgáltatás ébredni 5 percenként / 15 perc / 1 óra.
2.Monitoring GPS, itt, mint a megoldás megtalálható ebben a szálban Seattle-ben, hogyan lehet gyűjteni és tárolni az adatokat a küldéshez? (mielőtt mindent egyszerűen .txt tartott)
3. Az indy alkatrészek megfelelően működnek a szolgáltatásban? A kivételek működnek és hogyan kell megfelelően figyelemmel kísérni a hálózati kapcsolatot?
A probléma az, hogy a programnak kevésbé kell működnie, és ha egyszerű alkalmazásokkal rendelkezem tapasztalatokkal, nem tudok pár hónapon keresztül barátkozni a szolgáltatással.
Az összes hódnak!
A probléma régi, végre foglalkoznom kell vele.
Itt van egy tesztesemény, amelyben a TestPro alkalmazás és a helyi Android szolgáltatás TestService2-hez.
Elindítom a programot, megnyomom a Start szolgáltatás gombot, elindul a szolgáltatás (lásd: Beállítások -> Alkalmazások -> Munkavégzés).
A program bezárása nélkül más programokra váltok és dolgozom bennük. A legjobb a böngészőhöz való menni, és átmászni a lapokon (ez elég erőforrás-igényes alkalmazás).
Néhány perc múlva a feladatkezelőn keresztül visszajövök az alkalmazásomhoz, és a karcolásból indul. Vagyis a rendszer hosszú ideig szegezte a programot, és újra elkezdi a letöltést. Így a program hosszú ideig lóg a képernyővédőn, majd megjelenik az üzenet, hogy az alkalmazás nem válaszol! Kattintson az OK gombra. A program újraindítása után ugyanaz történik, és csak a harmadik alkalommal indul el a program.
Hogyan lehet megoldani ezt a problémát?
Megpróbáltam megölni a szolgáltatást
var LIntent: JIntent; LIntent: = TJIntent.Create; LIntent.setClassName (TAndroidHelper.Context.getPackageName (), TAndroidHelper.StringToJString ( 'com.embarcadero.services.TestService2')); TAndroidHelper.Activity.stopService (LIntent); az Application.Initialize vonalig - nem segít.
Megvalósítottam egy példát a mikrofon és az időzítő használatával az Android szolgáltatásban, amint azt a kérdés tárgya is jelezte.
Minden alkalommal, amikor elindítja a StartCommand szolgáltatást, vagy a szolgáltatás újraindul, a mikrofonról történő felvétel aktiválódik, és a zenei könyvtárba mentve a "myrecord.3gp" fájlba kerül.
Remélem, hogy a példám segít új hasznos megoldások létrehozásában. Ebben az esetben kérjük ossza meg őket közösségünk tagjaival.
A programok Android-on történő hibakereséséhez használja a LOGI bejegyzést, és olvassa el a monitor.bat (PlatformSDKs \ android-sdk-windows \ tools) segítségével.
használ. AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Időzítő. ; Const TimerInterval = 1000; TimerCounterSecLimit = 10; típus TDM = osztály (TAndroidService). privát FTimerHandle: Integer; FRecording: Boolean; eljárás StartRecord; StopRecord eljárás; eljárás StartTimer; StopTimer eljárás; nyilvános FAudioRec: JMediaRecorder; végén; eljárás Log (const Fmt: string; const Param: const sor); túlterhelés var Msg: string; M: TMarshaller; kezdődik Msg: = Formátum (Fmt, Params); LOGI (M.AsUtf8 (Msg) Toointer); végén; eljárás Napló (const Source: string); túlterhelés var M: TMarshaller; indítsa el a LOGI (M.AsUtf8 (Forrás) .ToPointer); végén; eljárás TDM.AndroidServiceCreate (Sender: TObject); kezdődik az FTimerHandle: = 0; FTimerCounter: = 0; FRecording: = hamis; végén; eljárás TDM.AndroidServiceDestroy (Feladó: TObject); Start StopTimer; StopRecord; végén; funkció TDM.AndroidServiceStartCommand (const Sender: TObject; const szándék: JIntent; zászlók, StartId: Egész): egész; akkor kezdődik, ha az Intent.getAction.equalsIgnoreCase (StringToJString ('StopIntent')) elindítja a StopTimer; StopRecord; Eredmény: = TJService.JavaClass.START_NOT_STICKY; // ne töltse újra a szolgáltatás naplóját ('- service stoped', []); a végén else kezdeni, ha nem az FRecording majd elkezdi a Naplózatot ('. startRecord; startTimer; végén; Eredmény: = TJService.JavaClass.START_STICKY; // újratervezés, ha leállítja a Log ('+ Service started', []); végén; végén; eljárás TDM.StartRecord; kezdődik a StopRecord; FAudioRec: = TJMediaRecorder.Create; FAudioRec.setAudioSource (TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat (TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder (TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile (StringToJString (TPath.Combine (TPath.GetSharedMusicPath, 'myrecord.3gp'))); próbálja meg a FAudioRec.Prepare (); FAudioRec.start; FRecording: = Igaz; Log (+ felvétel kezdete:% s ', [TPath.Combine (TPath.GetSharedMusicPath 'myrecord.3gp')]); az E kivételével: kivétel a naplózás ('- hiba a mikrofonfelvételben:% s', [E.Message]); végén; végén; eljárás TDM.StopRecord; akkor kezdődik, ha Assigned (FAudioRec) akkor kezdődik, ha az FRecording majd megkezdi az FRecording: = false; próbálja meg a FAudioRec.stop (); FAudioRec.release (); Naplózás ('- Mikrofelvétel leállítása'); kivéve az E-t: Kivétel a Napló ('- Hiba történt a mikrofon leállításakor:% s', [E.Message]); végén; végén; else else else kezdődik FRecording: = false; végén; végén; eljárás TDM.WaitComplete (TimerId: Integer); kezdődik, ha az FTimerCounter
Próbálok kijavítani egy logot a szolgáltatásból, de semmi sem figyel.
Például itt egy tesztprojekt
Ellenőrizze, hogy vagy?
PS. Az alkalmazás naplózása normálisan megtörténik
Egyidejűleg működhet egy adatbázis a programból és a szolgáltatásból egyaránt?
PS. Android
Valójában a cím témája. Hogyan?
Az SQLite + FDConnection használatát próbálom használni.
FDConnection.Params.Database: = TPath.Combine (System.IOUtils.TPath.GetDocumentsPath, 'basename.db'); működik az alap formában, de leteszi a szolgáltatást.
# 13; Nem tudom testreszabni a fejléc szövegének színét a TabItem-ben. Megváltoztatom a betűtípust, méretét és színét. De minden ugyanaz marad: # 13;
# 13; # 13; # 13; # 13;
A normál TTimer nem használható. By the way, miért ne? Miért utal az Activiti-ra az Androidapi.Helpers?
Embarcadero javítsa ki a hibáját.
Hogyan lehet időzítést végrehajtani a szolgáltatásban?
Most a 6. oldalon a felhasználók
Nincsenek felhasználók, akik ezt az oldalt látják