Hirdetés
- Android szakmai topik
- Vodafone mobilszolgáltatások
- Xiaomi 14T - nem baj, hogy nem Pro
- Redmi Note 13 Pro+ - a fejlődés íve
- Poco X6 Pro - ötös alá
- Narwal Freo Z Ultra - ne kerüld el!
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Minden (is) kiderült a Pixel 9a-ról
- iPhone topik
Új hozzászólás Aktív témák
-
Kutyauto
csendes tag
Üdv,
Köszönöm, ez megoldotta!
Amiket korábban írtál, azoknak is kezdem kapisgálni az értelmét...
Megtapasztaltam mekkora szívás is pl. amikor egy nem classban, hanem primitív változóban tárolt adatot később mégis by reference akarnék passzolgatni (végül találtam rá megoldást),
tovább addig, hogy mennyivel könnyebb is viewModelt, meg livedata-t használni , meg databindinget... meg stílusokat, meg még egy rakás dolgot amiket használni kell sokat mire az alapjaik készséggé válnak.
Óceán van tudnivalókból. Ha kitart a lelkesedésem pár év múlva talán ügyes 60-as junior leszek -
BE4GLE
aktív tag
válasz Kutyauto #5497 üzenetére
Szia! Nem nagyon követtem a projekted alakulását, de első ránézésre egy viewpager-nek tűnik, amit összehoztál. Abban van egy offscreen page limit, amit megváltoztathatsz, ha konzisztens működést szeretnél az oldalaidon. Feltéve, na nem túl komplexek az oldalak. Általában nem jó ötlet mindent a memóriában tartani.
Redmi Note 9 Pro
-
Kutyauto
csendes tag
válasz Kutyauto #5497 üzenetére
Az első lapon futó kód minden életciklus függvényét kiírattam és néztem a konzolon mi történik : átkattintok az elsőről a második oldalra, majd vissza.... Aztán az elsőről a harmadikra és vissza.
Elsőnél csak az onPause, majd az onResume fut le. Másodiknál van még valami, ami kiváltja az oldal újratöltését is. Át kell írnom ezt az onCreateView-t, hogy mindenképp jó legyen.
*******************************
D/EGL_emulation: app_time_stats: avg=598.44ms min=10.23ms max=6666.20ms count=12I/System.out: TAB1 fragment onPause
I/OpenGLRenderer: Davey! duration=766ms; Flags=0, FrameTimelineVsyncId=192136, IntendedVsync=38222434750298, Vsync=38222868083614, InputEventId=0, HandleInputStart=38222881628520, AnimationStart=38222881673120, PerformTraversalsStart=38222884529220, DrawStart=38223142900020, FrameDeadline=38222468083630, FrameInterval=38222881491520, FrameStartTime=16666666, SyncQueued=38223181721620, SyncStart=38223182247220, IssueDrawCommandsStart=38223183019820, SwapBuffers=38223197923120, FrameCompleted=38223201973620, DequeueBufferDuration=102100, QueueBufferDuration=2548500, GpuCompleted=38223201310720, SwapBuffersCompleted=38223201973620, DisplayPresentTime=8026311069216502372,
D/EGL_emulation: app_time_stats: avg=17.82ms min=5.02ms max=217.56ms count=41
D/EGL_emulation: app_time_stats: avg=772.65ms min=3.85ms max=4551.29ms count=6I/System.out: TAB1 fragment onResume
*************************
Aztán átkattintok az elsőről a harmadikra és vissza... Szintén a pause és a resume fut le , csak közben valamiért még belép a reklám blokk is.. de ha kiszedem az egész bannert, akkor is ugyanez van.
************************************
I/System.out: TAB1 fragment onPause
D/EGL_emulation: app_time_stats: avg=77.93ms min=3.00ms max=3133.50ms count=50
D/DynamitePackage: Instantiating com.google.android.gms.ads.ChimeraAdManagerCreatorImpl
I/Ads: This request is sent from a test device.
W/ConnectionStatusConfig: Dynamic lookup for intent failed for action: com.google.android.gms.ads.service.START
I/System.out: TAB1 fragment onResume
Ez után viszont jön még egy rakás sor, ami az előzőnél szintén nem jött. talán a kiemelt résszel van baja, ami miatt aztán megjön az onCreateView is.
I/Choreographer: Skipped 38 frames! The application may be doing too much work on its main thread.
D/EGL_emulation: app_time_stats: avg=5.34ms min=2.11ms max=30.96ms count=52
I/OpenGLRenderer: Davey! duration=941ms; Flags=0, FrameTimelineVsyncId=192481, IntendedVsync=38239284749624, Vsync=38239918082932, InputEventId=930823484, HandleInputStart=38239921690220, AnimationStart=38239921719020, .... és a többi
************************************************* -
Kutyauto
csendes tag
Sziasztok
A MainActivity-men van egy tabLayout aminek 3 lapja van.
Mind a háromba egy -egy xml töltődik, a hozzájuk tartozó Class-ok Fragment() ből vannak.
A második és harmadik lapok felépítése, betöltése teljesen megegyezik, csak a tartalma és a vezérlések kódja más.
Ha az elsőről a második page-re átlépek, majd az elsőre vissza akárhányszor, az első onCreateView-ja sosem fut le újra.
Ha az elsőről a harmadikra lépek át akár egy lépésben, vagy akár a másodikon keresztül, majd vissza az elsőre, akkor az első lap onCreateView-ja azonnal lefut újra.
Nem találom a kódban semmi indokát ennek a különböző viselkedésnek, ahogy látom minden vonatkozó rész tök egyforma felépítésű. Lehet ennek valami befolyásolható oka amit nem látok, vagy véletlenszerű, hogy az időlegesen nem látható első oldalt mikor tölti újra rendszer? Meg tudom kérni valahogy ne csinálja?
-
Kutyauto
csendes tag
Sziasztok,
No, elvileg készen vagyok egy alap változattal. Van itthon egy 2016 os kisebb felbontású Samsungom, azzal elvacakoltam mire azon is futottak és jól megjelentek a dolgok. Még memória korlátba is ütköztem, egyes funkciókat át kellett írnom. Bár elsősorban tanulási céllal csináltam ezt a konkrét játékot , azért nyilván hasznát is szívesen látnám ha van rá mód.
A jelenlegi változat csak lokálisan működik, ergo ha nincs hálózat akkor reklám sem fut, de játszani azt lehet vele. Hogy lehet ebből legjobban kihozni a pontenciálisan benne lévő 10 dollárt?
Látom pl. , hogy a MobAds nem engedélyez Donate gombot meg ilyesmiket. Van-e olyan platform ahová fel lehet tenni Donate gombos, vagy másképp PayPalos fizetést lehetővé tevő verziót és a mobilok is hajlandók megbízhatóként telepíteni az onnan származó cuccot?
Olvasgatok magam is ebben a témában, de ha van valakinek evvel kapcsolatban tapasztalata az érdekelne. -
Kutyauto
csendes tag
válasz Kutyauto #5493 üzenetére
Bár megnézve ezt https://support.google.com/admob/answer/3016009?hl=en és ebből átkattintva ide https://support.google.com/admob/answer/7356431
és utána ennek a harmadik pontjából
https://developers.google.com/admob/android/quick-start
átkattintva ide: https://support.google.com/admob/answer/7356431
...ugyanoda jutunk, tehát az első gondolatomnak kellett volna jónak lennie, a két érték egyforma volna... csak úgy nem működik. A tesztelésre feltalált értékek közül csak felemás párosítással működik valahogy...
Megint megfájdult a fejem és belekavarodtam... :-/ pihi. -
Kutyauto
csendes tag
válasz sztanozs #5492 üzenetére
Köszi. Átnéztem, de végül máshonnét lett jó.
Én is és amennyire látom az általad adott linken kérdező valaki is úgy gondolom/gondoltam,
hogy a Manifest és az XML fájlban ugyanannak az ID számnak kellene szerepelnie, de úgy sehogy nem működik nekem.
A https://developers.google.com/admob/android/quick-start#import_the_mobile_ads_sdk leírás (továbbiak "leírás") alapján, a Manifest fájlban a szintén ott látható Sample AdMob app ID komment sorban megadott értékkel elindul a cucc és akkor jelenik meg hirdetés, ha a megjelenítő xml fálban a fene tudja már hol talált "/6499/example/banner" érték, vagy a leírásban a Banner típus implenetációjára tovább kattintva ott megadott "ca-app-pub-3940256099942544/6300978111" érték szerepel.
Ha egyforma értéket írok akkor vagy el sem indul, vagy elindul de nem jelenik meg a banner.
Szóval igazából most azt hiszem két külön szám kell. A Manifestbe az app id, az xml-be meg a formátumnak megfelelő fix érték. Majd most próbálom cseszegetni, kitalálni mikor és hogyan cserélődik a tartalom, meg megnézni mikor mi hívódik meg rajta.
-
sztanozs
veterán
válasz Kutyauto #5491 üzenetére
csekk disz: https://stackoverflow.com/questions/53451980/getting-invalid-application-id-error-when-trying-to-implement-admob-in-android
+ https://support.google.com/admob/answer/7356431?hl=en-GB[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Kutyauto
csendes tag
Sziasztok,
Első körben lassan elkészül a nagy mű. Utolsó lépésként integrálni szerettem volna bele egy Google AdMob banner formátumot. Elvileg sikerült is, fordul az egész.
Regisztráltam az AdMob -on , felvettem teszt eszköznek a laptopon futó emulátort.
Ettől függetlenül nem akartam a saját AdMob ID-mal tesztelni, hanem a https://admob-plus.github.io/docs/cordova/test-ads oldalon található
ca-app-pub-3940256099942544/6300978111 ID-t tettem bele a Manifestbe és az Activitybe is. Sajna nem indul el, Invalid ID üzenetet kapok rá.
Végül kipróbáltam a saját számommal is, de arra is ez jön. Az talán még amúgy sem aktív, mivel még nem töltöttem fel semmilyen app boltba a progit. Ezt reklámmal együtt való tesztelés után terveztem. Hogyan kéne ennek mennie? -
Kutyauto
csendes tag
//Mire az alábbit megírtam, megoldódott.... Rendesen futtatva azért nem ment mert el volt írva a bekérő sor. Debug ablakban meg úgy látszik nem lehet kiértékeltetni ezt a kifejezést....
Sziasztok,
Vajh mi az oka annak, hogy a getString(id) nekem semmilyen formában nem megy?
Se a MainActivity onCreate -ben, se sehol máshol. Bárhol, bármilyen formában próbálom elérni, hibát ad vissza. A legkülönbözőbb elérésekkel, kontextekkel próbáltam. A string azonosítót feladja, aztán mégis az a hiba, hogy nem találja.
Most két sztring resource fájlom van, de default és egy (en) változat, de gondolom nem ez lehet a baj.
Órák óta szívok vele, amiket a neten találtam már próbáltam, de vagy nem is jött nekem elő a javasolt függvény, vagy ha mégis az is ugyanígy nem működött. Fragmentjeim is vannak.[ Szerkesztve ]
-
sztanozs
veterán
válasz fonixportal #5488 üzenetére
es miert nem YT-ra raktad fel? miert kell filemegosztoval szenvedni?
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
fonixportal
újonc
Sziasztok tudom hogy új vagyok itt de csináltam egy videót arról mi is az én problémám magyarítottam egy androidos játékot és ezzel a játékkal volna egy kis gondom amit magyarítottam nézzétek meg ebből minden érthetővé válik mi is a gondom. Ködzönöm
https://mega.nz/file/1ER1GYTa#INnJk82tD2SRSX_uW8qkOV3sFaaYYC5Oj7mSYo0fJRg
-
sztanozs
veterán
Le kellene sniffelni, hogy kommunikal a szerverrel es akkor lehetne csinalni hozza egy lokalis mock szervert DNS redirection-nel (vagy az apk hackelesevel).
Alternativakepp dekompilalni kell az apk-t es abbol kiturni, hogy hogyan kommunikal.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Ogard
tag
Évek óta használok egy moov nevű wearable edző rendszert, egy bokán hordható mozgásérzékelő és egy homlokpántba helyezett szívritmusfigyelő keveréke. A neve moov, nagyon pöpec, korát messze megelőzte, nagyon szeretem.
Nemrég telefont cseréltem és ekkor döbbentem rá, hogy a cég megszűnt, vagy legalábbis befejezték az eszközök forgalmazását és támogatását:
https://welcome.moov.cc/notice
a hozzávaló app nincs már fent a playstore-on. Az apkpure-on megtaláltam,
https://apkpure.com/moov-coach-guided-workouts/cc.moov.one/versions
letöltöttem, a szerver még működik, be tudtam logolni és le tudtam tölteni az adataimat is, és program beépülő edzésmoduljai is letöltődtek.
Eddig minden szép és jó, de mi lesz, ha lelövik majd a szervert? Működik-e majd vajon egyáltalán?
Kérdésem, hogy megoldható-e az app moddolása, úgy hogy online komponensek nélkül is működni tudjon, és vajon milyen nagyságrendű munka ez?
Egyáltalán mennyire moddolható forráskód nélkül egy ilyen app?
Nyilván nem azt gondolom, hogy én magam megcsinálnám, de lehet-e egyáltalán ilyen feladatra embert találni? (Nyilván nem ingyen - de kérdés, hogy megéri egyáltalán.)
Egyszer egyébként valaki picit moddolta már, részadatmentés céljából:
https://forum.xda-developers.com/t/app-mod-moov-coach-v5-1-4131.3948505/
de ez csak minimális változás volt.[ Szerkesztve ]
-
Kutyauto
csendes tag
Köszi a tippeket, utánaolvasok, ki fogom próbálni amiket nem ismerek belőle.
Sok mindennel játszom, kísérletezem amibe belebotlok... igazából csak a tapasztalás, tanulás kedvéért írogatom amiket most csinálok. Érdekes, hogy pár programsorral olyan funkciókat lehet megvalósítani, mint az írott szövegek felolvasása... ugyanakkor például éppen ebben jött elő, hogy ha előkészítem
tts = TextToSpeech(mycontext, ttsListener )
majd a listener initjében szeretném beállítani a default lokációnak megfelelő hangot ...
val voice = tts?.voices?.first { it.locale== Locale.getDefault() && !it.isNetworkConnectionRequired}
if (voice != null) {
tts?.setVoice(voice)
}
Hát a tts.voices egy 389 elemű lista, amelyből nekem csak az a 2-3 elem kell, ami megfelel néhány paraméternek. Ennek a listának a szűrése ( .filter{} ), keresni benne ( .first{} ) elemet a mostani tapasztalatom szerint baromi lassú... egyelőre nem találtam azt a módszert ami ne tűnne nagyon lassúnak.
A másik, hogy intiben beállítom a sebességet (alapból is amúgy is 1 lenne gondolom)
tts?.setSpeechRate(1f)
de ennek ellenére az első néhány megszólalás sokszor nagyon hadarós. Aztán lelassít a beállított normál tempóra. -
BE4GLE
aktív tag
válasz Kutyauto #5483 üzenetére
Szia! Pár tippet tudok adni. Kerüld a mutable listát és a mutable object-et. Final listával dolgozz, amiben data class-ok vannak kizárólag final property-vel. A sortby az eredeti listádat módosítja. Tehát van mellékhatása. A final list esetében viszont új listát kapsz, ha rendezed. Ha az elemeken valamit változtatnod kell használd a lista map metódusát és a data class copy metódusával módosítsd, amit kell. A mutable collection-öket inkább csak arra használd, hogy elemekkel töltsd fel őket. De de később már ne módosíts rajtuk. Mindig interface típussal térj vissza, sose mutable-lel.
[ Szerkesztve ]
Redmi Note 9 Pro
-
Kutyauto
csendes tag
Van egy mutable listám, vannak benne objektumok.
Sorba rendezem a lista.sortBy{it.property} módszerrel, majd végigmennék rajta és végeznék írási műveleteket benne, és eközben egyszer csak elvész a beállított sorrend... ezzel bajlódok épp.
Eleve bajom volt, mert a benne lévő objektumok saját classból vannak és a saját propertyre akartam a sorrendet beállítani. Ez csak úgy működött, ha a classban a propertyt
@JvmField var Property:String =""
módon adtam meg, egyébként kaptam egy Illegal access hibát a sortBy-ra . Ezt kigugliztam, de most meg avval szivat, hogy elvész a beállított sorrend menet közben.Elfáradtam bele, csinálok egy kis fizikai melót...
[ Szerkesztve ]
-
Kutyauto
csendes tag
válasz bandi0000 #5481 üzenetére
No igen ez alapból jó ötlet.... azon a szinten amin most bolyongok Androidban.
De később szeretnék tovább lépni MySql felé , illetve Repository-t is használni.
Korábban úgy csináltuk, hogy amikor mondjuk kiadtunk egy új programfájl verziót ami mondjuk adatbázis módosítást is igényelt / tartalmazott, és a felhasználói hálózaton vki megpróbálta lefrissíteni a programját, akkor a progi lefrissült, majd az indulásakor kinézett az SQL-re és ha más nem volt rajta bejelentkezve, akkor megfrissítette az adatbázist is a saját magasabb verziójára és szépen elindult.
A többiek a köv. induláskor persze nem tudtak belépni csak programfrissítés után.
Errefelé gondolkozom most is távlatilag, ezért küzdök ilyesmikkel.
-
-
Kutyauto
csendes tag
No volna egy hétköznapibb bajom is, talán vkinek ismerős...
Van a Studioban a Tools->Kotlin-> Kotlin REPL nevű eszköz... olyan command line féle
Ez nem indul el nekem, ezt írja:
`CommandLineWrapper` is ill-suited for launching apps on Java 9+.
If the run configuration uses "classpath file", please change it to "@argfile".
Otherwise, please contact support.
Ha a Run->Edit configurations-> Edit config templates menüben a Kotlin és Kotlin Script lapokon az Environment variables mezőbe beírom hogy classpath=@argfile , akkor elindul... de hiába tárolódik el, legközelebb megint ugyanaz a baj ismét be kell lépnem és leokézni hogy elinduljon. Amit lehetett már frissítettem. -
Kutyauto
csendes tag
válasz bandi0000 #5478 üzenetére
Köszi... No küzdök vele, haladok lassacskán.
Ez az egész abból jön, hogy próbálom megcsinálni azt az indításkori műveletet, amit az egyszálú Foxproban leegyszerűsítve anno valahogy így csináltam...
llRet = true
IF ( Nincs meg a helyén az adatbázis? ) // nem futott még, vagy letörölték, átnevezték...
llRet = Adatbázis létrehozása()
IF (llRet)
llRet = Tábla1 ellenőrzése / létrehozása / feltöltése()
ENDIF
IF (llRet)
llRet = Tábla2 ellenőrzése / létrehozása / feltöltése()
ENDIF
..... és így tovább
ENDIF
IF (llRet)
// futott már és/vagy elvileg kész a háttér
llRet = Adatkörnyezet beállítása ()
ENDIFReturn llRet
... ha itt False , akkor nincs értelme tovább futni, mert előbb utóbb hiányozni fog vmi...Itt nyilván minden egyes sort meg kell várni, mert ha valamelyik bármilyen hibára megy akkor a többit nincs értelme futtatni, elindulni sem lehet. Hát igen, ilyenkor az ember kitett egy szép folyamat jelzőt, az user meg szépen kivárta a végét...
Ezt nekem nagyon nehézkessé teszi kezelni, ha minden egyes adatbázis műveletet külön szálban, vagy launch ban kell indítani és az indító kód fut közben tovább. Szerintem ez is a Node.js tanfolyamon megismert Pyramid of doom vagy Callback hell helyzet, amit ott async - await()-ekkel oldanak fel.
No, ezt próbáltam itt is megérteni és kibogozni, de lehet hogy alapból rossz végén akarom megfogni a kapát... Bocs ha fárasztó vagyok :-) -
Kutyauto
csendes tag
válasz bandi0000 #5476 üzenetére
Hát igen, össze vissza alakulnak ki a dolgok, nem lehet mindig lépésről lépésre haladni.
Sokszor kell visszamenni, átdolgozni,kipróbálni más megoldást is... Korábban is így boldogultam, csak talán egyszerűbb volt az az eszköz, meg nem voltak olyan berögződött elképzeléseim mint most.
Végül kipróbáltam a ViewModeles megoldást is.
Az initjébe betettem a lekérdezést így :
init {
var setup: Setup? = null
try {
viewModelScope.launch(Dispatchers.IO) {
setup = AppDatabase.getInstance(mycontext).gradeDao().getsetup()
if (setup != null) {
this.pnSounds = setup!!.voice
this.pnBuzz = setup!!.buzzer
this.ActualMatrix = setup!!.matrix
this.ActualLevel = setup!!.level
}
}
} catch (e: Exception) {
Log.e("loadSetup hiba", e.message!!)
}
}
És így jó. Így is csak a viewModelScope.launch(Dispatchers.IO) megoldással megy.
A lifecycleScope nem tudom miből jönne (**), nem tudtam beimportolni sehogy. De a scope és launch szavak alapján a
LifecycleCoroutineScope.launch() -ot
meg ezt a
viewModelScope.launch() -ot találtam. Utóbbit választottam, mert nem kért importot és maradt is mert így működik.
(**)
Ezeket az alábbi Gradle sorokat beletettem, de sehogy sem akarta...
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
Köszi a tippet. -
bandi0000
nagyúr
válasz Kutyauto #5475 üzenetére
Nem az öregséggel vagy épp fiatalsàggal van a gond, hanem a tudás felépítésével
Kb ezt úgy tudom elképzelni, hogy valaki elolvassa, hogy hogyan kell falat festeni, aztàn ràjön, hogy nincs fal, akkor gyorsan utánanéz, aztán megint gond van, mert nincs vakolás, glettelés stb stb
Most ha minden áron működőképesre akarod kalapálni, akkor az onCreate-ben, csinálj egy ilyen blokkot:
lifecycleScope.launch{
}
És oda rakd be a suspend fv hívásodat
Xbox One: bandymnc
-
Kutyauto
csendes tag
válasz bandi0000 #5474 üzenetére
Hát igazából ez a sor
var setup = AppDatabase.getInstance(mycontext).gradeDao().getsetup()
ami lekérdezné a tárolt beállításokat panaszkodik rá, hogy nem tud ő a fő szálon futni.
Erre aztán kipakoltam egy funkcióba, hogy majd az lekéri és beállítja amit kell.. de persze ezt se tudom hívni onCreate-ből, tehát amúgy sem volna jó.
Az egész földhözragadt sorról-sorra világképemmel van baj.
*****************
import android.util.Log
import com.example.rapidsk.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
suspend fun loadSetup() {
var setup: Setup? = null
val cSql = AppDatabase.getInstance(mycontext)
GlobalScope.async {
try {
var setup = AppDatabase.getInstance(mycontext).gradeDao().getsetup()
} catch (e: Exception) {
Log.e("loadSetup hiba", e.message!!)
}
}.await()
pnSounds=setup.voice
pnBuzz=setup.buzzer
ActualMatrix = setup.matrix
ActualLevel = setup.level
}
********
Pár hete kicsit Node.js -el is foglalkoztam, abban is eljutottam valameddig, az ottani async is bekavarhat. Később majd az volna az elképzelés, hogy MySQL + Node volna középen, a kliensek oldalán meg mennének az Android appok.De most jól összekeveredett a fejemben minden, túl sokféle újdonságot olvastam meg írtam össze túl gyorsan. Talán túl öreg vagyok én már ehhez. :-/
-
bandi0000
nagyúr
válasz Kutyauto #5473 üzenetére
Húha, itt azért elég sok alap dolog hiányzik...
Egyrészt ezt úgy szokás, hogy pl ha màr van viewModelled, akkor ott a mentésre hasznàlod a viewModelScope-ot, amivel ki tudsz menni az IO szálra, és ott elvégrzni a szükséges műveleteket
Visszatöltés hasonló képpen, de ha már adatbázis, és gondolom Room, akkor kézenfekvő a LiveData vagy Flow hasznàla
Apropó, mihez kell neked az async await ha màr coroutint használsz?
[ Szerkesztve ]
Xbox One: bandymnc
-
Kutyauto
csendes tag
Sziasztok,
Már megint összerúgja a bokámat ez a többszálas korutinos dolog...
van a MainActivity aminek az OnCreate- jében akarok csinálni számos Room adatbázissal kapcsolatos dolgot. Egy része megy, amiknek a befejezésére nem kell várnom. (létrehozás, feltöltés csv fájlból default értékekkel stb...)
Viszont például kiolvasni már tárolt értékeket adatbázisból és UTÁNA azoknak megfelelően futtatni tovább az onCreate-t .... ez nem sikerül.
Mivel az async().await csak suspend függvényben működik, az onCreate meg nem engedi magát suspend deklarálni.Csűrtem és csavartam mindenfelé, de elakadtam vele...
-
Kutyauto
csendes tag
válasz Kutyauto #5441 üzenetére
"...A kérdés: A benne lévő AVD emulátort használom. Sajna szinte minden nap törölni kell és újra kell telepíteni , mert megdöglik, nem tud elindulni. Jó, hogy pár kattintás, de..."
Evvel kapcsolatban megírnám csak a rögzítés kedvéért, hogy mióta ( 8-10 napja talán ) átállítottam az emulátort arra, hogy teljesen külön ablakban induljon és fusson, azóta a fenti probléma nem fordult elő. -
Kutyauto
csendes tag
válasz thiclyoon #5466 üzenetére
Köszi, a viewModel lesz a jó kulcsszó. Tanultam az Activity életciklusokról és a saveInstanceState-ről, de nem emlékszem hogy a viewModelről lett volna szó. Persze nem kizárt, de nem emlékszem rá. A tanfolyam harmadik részét nem vettem meg, ott egész biztos előkerült volna. De mindegy, ennyi már elég, holnap majd utánaolvasok.
-
thiclyoon
aktív tag
válasz bandi0000 #5467 üzenetére
Erre vonatkozott a kérdése: "újraindul az egész cucc a forgatás után és elveszik az alkalmazás teljes állapota", "szóval megoldja a kimentést, visszatöltést bármire amit a memóriában találok"
Persze hogy nem ajánlott, szó szerint ezzel kezdtem a válasz kifejtését#5468 fatal: én nem vitatkozom ezzel az állítással, elég volt a tanároktól meghallgatni
[ Szerkesztve ]
-
bandi0000
nagyúr
válasz thiclyoon #5466 üzenetére
Miért kellene singleton viewModel? Az pont arra van, hogy config változás esetén, mint az elforgatás, megtartja az àllapotát
Önmagában nem is ajánlott singletont csinàlni a viewModelből, nàlunk egy bug volt miatta, mert az app bezárása esetén megmaradt a memóriában, viszont a lifecycle cuccok meg nem indultak újra
Xbox One: bandymnc
-
thiclyoon
aktív tag
válasz Kutyauto #5465 üzenetére
TL;DR: singleton viewmodel.
Igen, tudom, hogy ez antipattern - viszont egyetemen is ezt tanítják (nem mintha ez érv lenne persze...). Androidon jelenleg nincs jobb / szebb megoldás erre (tudtommal / tanáraim tudtával) - a saveinstancestate nem erre van -, úgyhogy sajnos ezzel kell menni. De ha valaki járatosabb a témában, ne tartsa magában és persze nagyon könnyű rosszul használni, lásd például ezt (ez pont nem android, de a lényeg ugyanaz)
-
Kutyauto
csendes tag
Sziasztok,
BÚÉK mindenkinek!
Van az a dolog, hogy ha nem tiltom le a képernyő forgatást, akkor újraindul az egész cucc a forgatás után és elveszik az alkalmazás teljes állapota.
Egyelőre a fix orientációt használom, de kísérleteztem használni az "onSaveInstanceState"-et meg a párját...
Szimpla kulcs-érték párok mennek azzal nincs is baj, de van nekem egy rakás másféle objektumom is amiket meg kéne tartani.
Mint például egy ilyen
var MatrixDraw = mutableListOf<MyImageView>()
változót, amiben van egy lista spéci ImageView objektumokból, saját beállított propertykkel meg ilyesmi.
Az ilyenek kimentésére-visszatöltésére nem találtam működő megoldást sehol.
Nem tudtok olyasmi megoldást, aminek csak megadom a kulcsot, meg az értéket, aztán ő elvacakol a megfelelő metódus kiválasztásával, konvertál típust ha kell.... szóval megoldja a kimentést, visszatöltést bármire amit a memóriában találok ? -
Kutyauto
csendes tag
Tudja valaki hogyan lehet emulálni a mobil megrázását (shake) az emulátoron ?
CTRL+M kombinációt olvastam, de nekem a CTRL csak két pöttyöt pakol fel a képernyőre, azokat sem tudtam megfejteni mire volnának valók, de rázást nem sikerült előállítani sehogy. -
thiclyoon
aktív tag
válasz Kutyauto #5459 üzenetére
Saját, több külön projektben újra és újra felhasználni tervezett osztályokat, funkciókat hová kell tenni?
Meg is válaszoltad ha ugyanúgy akarod őket behúzni, mint más függőségeket, akkor pontosan ugyanúgy kell őket kezelned. De amúgy valahogy úgy néz ki ez a legtöbb esetben, hogy ha organikusan növi ki magát, akkor
- elkezded észrevenni az ismétlődéseket, újrahasználható részeket (ezzel meg is vagy),
- ezeket összeszeded, bővítgeted, és projektenként testreszabod. Itt még általában csak egy fájlhalmazról beszélünk, amiket manuálisan behúzol a projektekbe. Érdemes több projektben kipróbálni őket, hogy 1, hasznosak-e annyira, hogy tényleg ki kell őket szervezni és 2, a hibák jobban előjöjjenek -> érdemes lehet teszteket is írni, ha olyan kódról van szó,
- a fájlhalmaz bővülésével jöhet a gondolat, hogy ha már nem 2 függvényről van szó, akkor érdemes lenne verziókezelni -> összeszeded a dolgokat, és
- publikálod a kódot. Erre van sok leírás, például ez jónak tűnik. Elsőre bonyolultnak tűnhet, de nem nehéz; GitHub kell hozzá és ennyi igazából[ Szerkesztve ]
-
Kutyauto
csendes tag
válasz thiclyoon #5457 üzenetére
Van anyagom az enumra, volt róla szó de nekem újdonság, nem is jutott eszembe.
Most az a szituáció, hogy ugyanazon a gépen játszom. Nincs élő partner, a gép lép egy timerrel, aztán megint én. A gép lépése után ugyanúgy elindulnak az animációk amikor olyan a szitu. És én úgy veszem észre, hogy ha egymás után elindítok 6 db animációt akkor sosem fogom tudni hogy melyik ért véget utoljára, hogy az kapcsolja majd vissza a lépés lehetőségét.(ezt próbáltam áthidalni az AnimCount változóval) Ráadásul úgy veszem észre ha az AnimationEnd metódusban visszaállítom a lépés lehetőségét (Clickable=1 ), majd rögtön köv. sorban eltüntetem (Invisible) a kiesett ImageView-t... hiába... már rég le van futva a két sor, mikor (ha elég gyors vagyok) még mindig rá tudok bökni az elemre amire már nem volna szabad tudnom rábökni. Vagy elvétek valami sorrendet, logikát, vagy ez ilyen... nem tudom.
Lényegében most megoldottam hibátlanra egy plusz timer beépítésével és túl is gondolom bizonyos szempontból, hiszen ha hálózaton másik játékossal fog menni a játék (amit célom lesz beépíteni NodeJS alapon) akkor bőven lesz idő mindennek lefutnia míg a kommunikáció lezajlik.
Amúgy is minden nap ezer dolog merül fel amibe belebotlok és nem értem de meg kell tanulnom hogy így van és kész.
pl. van a gombnak strikeColor meg strikeWidth tulajdonsága amit az xml-ben be tudok állítani de futásidőben már nem érhetők el. Vagy hogy használni tudom a setBackColor függvényt, de lekérdezni a gomb aktuális színét csak egy külön furmánykodással lehet. Persze ezt a furmánykodást beépíthetném egy saját funkcióba, ilyenekből épül aztán az embernek egy saját függvénykönyvtára és kész.
Apropó, az pl. nem lett kibeszélve a tanfolyamon, hogyan épül fel ideális esetben egy ilyen rendszer. Saját, több külön projektben újra és újra felhasználni tervezett osztályokat, funkciókat hová kell tenni? Hogy ugyanúgy lehessen aztán behúzni őket egy új projektbe saját gépről, mint a többi függőségeket.
Vágom a fát szorgosan, de nem látok a szálló forgácstól... -
Kutyauto
csendes tag
-
thiclyoon
aktív tag
válasz Kutyauto #5455 üzenetére
Ha minden igaz, a
GuestTheNext: Int
a játék állapota. Én áttérnékenum
használatára (bár azInt
tel is megoldható minden, csak szebb, könnyebb lenne előbbivel - ha nem ismered, nem gond, maradhat, ahogy van), és 4 állapotot hoznék létre: egyik lép, másik lép (ez megvolt nálad is 0 és 1 értékekkel), egyik fog jönni (az animáció után), másik fog jönni (az animáció után)(Nem tudom így mennyire világos, majd írok pszeudokódot ha úgy van. A koncepció az, hogy nem a tappolhatóságot állítod, hanem állapotokkal modellezel; amint tappolt a user, átállítod olyanra, hogy ne érdekeljen, ha tappol)
[ Szerkesztve ]
-
Kutyauto
csendes tag
Egyébként más is küzd ilyennel, ez itt erről szól :
https://stackoverflow.com/questions/10987633/disable-all-touch-screen-interactions-while-animation
De igazából nem így kéne megoldani, hanem ráérezni ennek a többszálúságnak a lényegére és úgy szervezni a kódot, hogy jó legyen.
Gondoltam aztán, hogy csinálok saját osztályt a FrameLayout ból aminek csinálok setClickableAll(mode:Int) metódust ami minden elemre beállítja amit paraméterbe kap ilyesmi ciklussal... de a programból hozzáadott elemeket nem találtam meg a getChildCount()-tal... mintha nem is volnának.
for (int i = 1, i < layout.getChildCount(), i++) {
TableRow row = (TableRow) layout.getChildAt(i)
row.setClickable(false)
}
No, szóval küzdök mint malac a jégen... Ilyen hosszadalmas és kevéssé egzakt problémákkal nem terhelnélek titeket, de ha lesz könnyen azonosítható kérdésem, akkor mindenképp megjelenek vele... -
Kutyauto
csendes tag
válasz thiclyoon #5454 üzenetére
Hát én tényleg csak kezdő vagyok ebben a rendszerben, nem egy mutatni való minőségű kód ez. Mindent kipróbálok ami szembe jön, aztán ha már megtaláltam, kitököltem akkor sem törlöm ki ha mégsem akarom használni, csak kikommentelem. (Mint pittyegés, wav lejátszás, rezegtetés meg effélék) Szóval katyvasz még.
A lényeg, hogy van egy fragmentem, abban egy frame layout.
Ebbe a layoutba futás idő alatt kóddal helyezek el egy csomó egyforma ImageView objektumot. A végeredmény úgy néz ki kb. mint egy sakk tábla.
Minden ImageView ugyanazt a timer kódot futtatja kattintáskor. Mindenféle kiértékelések , és akár hat elemen is animációk futtatódnak. Ennek mind le kéne mennie és a köv. kattintásnak csak ezek után kéne lehetővé válnia. Leegyszerűsítve, áttekinthetősítve ilyen volna:var Clickable:Int = 1 // segéd változó ez jelzi, hogy kattinthatók-e éppen az elemek.
var AnimCount = 0 // segéd változó amiből az utoljára befejeződő animációnak látnia kéne, // hogy a Clickable-t neki kell visszaállítania 1-re.
var ViewList: MutableList<View> = mutableListOf<View>()
// segéd lista amit kezelgetek - a gépi válaszlépés használja.
var GuestTheNext:Int =1 //ki lép következőre ?/*ImageView click kód*/
ImageView.onClickListener{
if (Clickable==1){
onClick()
} // onClickListener vége
}fun onClick()
{
Clickable = 0
/* itt vannak még egyéb dolgok, változókat állítok, képeket cserélek vezérléseken, ilyesmik*/
click_timer.start() // itt indulna egy timer, ami kis időt ad a usernek érzékelni a képernyőn //történt változást, majd értékel és visszaállítja a képernyőt várva a köv. //lépést.
}
/*ImageView click kód vége*/
/* timer kód*/
val click_timer = object : CountDownTimer(500, 500) {
override fun onTick(millisUntilFinished: Long) {}
override fun onFinish() {
/*animáció meghívása két adott objektumra*/
Remanim(ActiveView1)
Remanim(ActiveView2)
/* ... itt egy csomó egyéb művelet, elágazás stb.*/
/*animáció meghívása további objektumokra*/
Remanim(fw_binding!!.imageViewB)
Remanim(fw_binding!!.imageViewC)
Remanim(fw_binding!!.imageViewJ)
} //OnFinish vége
} /*timer kód vége*//*Az animáció*/
fun Remanim(view: View) {
view.animate()
.setDuration(500)
.rotation(360f)
.translationY(0f)
.alpha(0.0f)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
super.onAnimationStart(animation)
AnimCount++
}
override fun onAnimationEnd(animation: Animator) {
super.onAnimationEnd(animation)
/* itt vannak még dolgok, pontszám kiírása ilyesmik*/
if (AnimCount <= 1) {Clickable = 1}
AnimCount--
view.visibility = View.INVISIBLE
ViewList.remove(view)
if (GuestTheNext == 1) GuestTheNext= 0 else GuestTheNext= 1 //játékost cserél
if (GuestTheNext==1){
guest_timer.start() // itt hívódna a vendég játékos, illetve a gépi válasz lépése. tulképp ő is az // onClick() függvényt fogja hívni, csak másik View paraméterrel.
}
}
})
Lényegében a változókkal variálás nélkül simán szét lehet kattintani a képernyőt míg a timer meg az animációk futnak. Végső soron ezzel a variálással sem tökéletes.
Ha elég vadul tapizom a képernyőt akkor szétesik a kód, kétszer egymás után is ugyanaz a játékos tud lépni. -
thiclyoon
aktív tag
-
Kutyauto
csendes tag
Most épp egy játékot csinálok, amiben vannak animációk, timeres dolgok is. Egy-egy lépés után le kéne fussanak a dolgok és mindaddig nem kéne szabad legyen bele kattintani a képernyőbe.
Evvel szívok, próbálom változóval megoldani no de mindenhová ifeket írni elég macerás. És még csak nem is nagyon működik, folyton összeakadnak a rutinok egymással. Nem találtam olyat, amivel egy lépésben tiltani tudnám az interakciót. Marha szokatlan nekem ez a többszálú működés. Sokat Foxproztam, ott szépen egymás után futottak a dolgok, meg kellett szenvedni ha nem úgy akartad. Itt meg fordítva...[ Szerkesztve ]
-
Kutyauto
csendes tag
Hát jó eddig nem lett. Azt vettem észre, hogy amikor elsőre nem bírom elindítani olyankor beragad a memóriába egy emulator.exe meg egy emulator64-crash-service.exe és egy qemu-system-x86_64.exe nevű program. Ha azokat mind kilövöm, akkor következő manuális indításra elindul rendesen.
-
Dilikutya
félisten
válasz thiclyoon #5444 üzenetére
Nem tervezek átképzést. Csak bele akarok kóstolni, kíváncsi vagyok. Tudom, hogy nem egy ilyen anyag a csoda. IT-s vagyok, de a programozáshoz amúgy annyi közöm van, amit fősulin tanultam, főleg C#, kis php.
Nem vagyok perverz, csak haladok a korral. (Még mindig: Rock&roll feeling baby, rock&roll feeling.....)
-
thiclyoon
aktív tag
válasz Dilikutya #5443 üzenetére
Ismerem az alkotókat nincs közöm a projekthez, de valamennyire rálátok a dolgokra. Van konkrét kérdésed esetleg? Általánosságban nehéz beszélni, nagyon sok minden függ tőled (hogy csak két végletet említsek, nem mindegy, hogy a pár kommenttel feljebb is előjött "szeretném átképezni magam, mit tegyek?" szintről indulsz, vagy van 2 mérnöki / IT diplomád, eddig backendeztél, és mostantól szeretnél frontendezni)
Amit mindenképp érdemes tudni - bármilyen szintről is jön az ember -, hogy egy online kurzus elvégzése után (legyen az bármilyen jó / rossz) nem lesz fejlesztő, meg a cikkekben sokszor clickbaitelt "milliós fizetések" sem fognak bekopogni.
Azért is krédezem a fentit, mert ha valaki az alapoktól indul, és nagyok az elvárásai (nem saját hibája miatt, ahogy említettem, a hírekben is például gyakran felfújt dolgokat lehet látni), az - szerintem - minden online tanfolyamban csalódni fog, és az elköltött 3,5 forintot is bánni fogja. Ha meg profi / hozzáértő, akkor nem gondolnám, hogy egy magyar nyelvű kurzusra akarna támaszkodni. De mindig van edge case, olyan kivétel, amire nem is gondolnék
Nem rontva az üzletet az szerintem mindenki számára nyilvánvaló, hogy ha munkaszinten akar ezzel foglalkozni valaki, akkor az angol elengedhetetlen számára (ha valakinek ez új, akkor most már tudja ). Angol nyelvű kurzusból meg rengeteg van, ahol nem csak egy random magyar fórumozó véleményét tudod kikérni. Teljesen véletlenszerűen felcsaptam a Udemy-t, beírtam hogy "Angular", az első találat 176922 értékeléssel rendelkezik és 646944 tanuló vette meg. 177k értékelést átolvasni persze végtelen idő lenne, de van hozzá x/5-ös szummázott értékelés is nyilván. Ehhez meg nem árt tudni, hogy az Udemy trükkös, és ki kell várni az akciót - de ha még úgy is sok lenne a kb. 15 dollár / nincs kedve az embernek kivárni, akkor nem kell sok leleményesség a let's say virágbolti verzióhoz. -
Dilikutya
félisten
Ezt ismeri valaki? Proapp.
Nem lenne drága, ha értékelhető tudást, anyagot ad. Viszont sehol nem találok róluk semmilyen véleményt.Nem vagyok perverz, csak haladok a korral. (Még mindig: Rock&roll feeling baby, rock&roll feeling.....)
-
Kutyauto
csendes tag
Sziasztok,
Android Studioban próbálkozom egy alap tanfolyam után. Egyszerűbb kis appok már mennek.
Pályamódosításként kezdtem bele, de már látom hogy valószínűleg csak hobbi marad... azért csinálom, amikor szórakoztat, hátha lesz valami.
A kérdés: A benne lévő AVD emulátort használom. Sajna szinte minden nap törölni kell és újra kell telepíteni , mert megdöglik, nem tud elindulni. Jó, hogy pár kattintás, de például az emulátoron átállított nyelv, meg ilyesmi mindig elvész és az már macerásabb. Valamit nem jól csinálok, vagy hogy lehetne ezt elkerülni? (általában csak hibernálom a gépet amikor nem használom, de úgy vettem észre mindegy neki ha rendesen leállítom is.)[ Szerkesztve ]
-
prime_adam
aktív tag
Akinek van már Google Play developer accountja tudna segíteni pár kérdésben a regisztráció kapcsán? Nem akarom elszúrni, mert folyamatosan fizethetek érte.
Igazából a Google Dev account és Google account közötti kapcsolat nekem nem tiszta. Ami fontos, hogy céges accountot nyitnék.
1. Azt írja, hogy a Dev account és Google account végérvényesen összetartozik és nem változtatható. Egy business dev accountnál, ahol több felhasználó is lehet ez nagyon rossz gyakorlatnak tűnik, hiszen ha eltűnik a fő felhasználó az összes business adat és app megy a kukába. Vagy valamit nem jól értelmezek?
2. A fenti gondolatmeneten létrehozok egy új google fiókot a business számára (más nevén, mert nem az enyém a business), de szeretném használni, mert én fogom feltölteni és kezelni a cuccokat, akkor attól félek, hogy bannol a google több fiókhasználat miatt.
3. Végezetül amikor hitelesítésnél kérik a személyit, most a google account adatait akarják ellenőrizni vagy a play developer-nél megadott adatokat?Teljesen kavarnak tűnik nekem ez az egész, mintha összemosnák az egyéni és céges dolgokat.
[ Szerkesztve ]
-
thiclyoon
aktív tag
válasz prime_adam #5437 üzenetére
Szerintem a Stripe-ot így nem lehet megoldani (vagy szét kell hackelni valahogy), ez tipikus olyan SDK-nak tűnik, ami felrak egy gombot, a többit intézi (google login is hasonló). Biztos van rá kerülőút / "okos megoldás", de gondolkodni kell rajta...
-
prime_adam
aktív tag
válasz thiclyoon #5435 üzenetére
Köszi a választ!
A külső linkek kezelését megnéztem és valóban találtam rá megoldást (legalábbis elméletileg).
A fizetési rendszerrel viszont továbbra is vannak bajaim. Ahogy nézem az SDK-t úgy tudom használni, hogy van egy "natív gomb", ami fizetésre megjelenít egy réteget az app felett. Ez egyébként tök jó lenne, csak a fizetési gomb már szerepel a webes verzióban, elküld egy kérést a backendnek, az elindítja a stripe fizetést és a frontend visszakap egy URL-t, amire megtörténik az átirányítás. Tehát nem tudom, hogy ebben a folyamatba hogy lehetne az SDK-t beilleszteni, ráadásul belülről a webview-ból triggerelni a natív fizetést
Szerk.: talán azt lehetne, hogy mint a külső linknél, ha stripe átirányítás történne, helyette bedobom a natív stripe fizetési réteget és lekérem hozzá az adatokat. De ez csak ötlet, fogalmam sincs, hogy működne-e
[ Szerkesztve ]
-
balazs1022
őstag
válasz balazs1022 #5432 üzenetére
Erre senki? Még fizetnék is érte, ha valaki meg tudná csinálni. :)
-
thiclyoon
aktív tag
válasz prime_adam #5434 üzenetére
Offban írom, mert ezek natív iOS-es tapasztalatok - közel sem biztos, hogy Androidon is pont így van minden, de a nullánál talán több:
- normál böngésző kezelését a mobilra fejlesztett app kódjából lehet megoldani,
- appon belüli vásárláshoz pedig le kell fejleszteni (legalább) azt a részt mobilra is, be kell húzni az adott SDK-t (elvileg ez az Androidon), másképp nem oldható meg szerintem, amit írtál,
- offline működéshez pedig itt lehet érdemes elindulni, ez is kódot igényel tudtommal.Ahogy írtam, nálam iOS tapasztalat van (de egy székkel odébb a kollégám csinálta meg ugyanezt Androidra). Nálunk könnyítette a helyzetet, hogy nem kellett se offline működés, se fizetéses funkció, így csak a böngésző alakítása kellett. Valamint azt még érdemes lehet tudni (például azért, mert lehet, hogy egy év múlva meg iOS-re szeretnétek áttérni), hogy az Apple korábban elég szigorú szemmel nézte az ilyen (egy WebView-ba csomagolt) appokat, és nem is nagyon engedte ki. Ma már jobb a helyzet, de ez is egy kockázat lehet
-
prime_adam
aktív tag
Sziasztok!
Egy kis elméleti segítséget kérnék tőletek, de légyszi csak kíméletesen, mert nem vagyok mobilfejlesztő.
Adott egy viszonylag komplex weboldal (frontend React), ahol egy külső payment gateway (Stripe) van használatban. A felület szépen skálázódik mobilra is.
A kérdés, hogy van valami egyszerűbb mód ebből appot csinálni, vagy felejtős? React Native WebView-ra gondoltam, de van egy csomó kérdés, ami nem tiszta:
- Külső linkeknél hogy akadályozom meg, hogy ne a webview-ba töltődjön, hanem például nyissa meg normál böngészőben?
- Hogyan tudok webview-ból stripe fizetést indítani? Ugye Google nem fogja elfogadni, ha simán betöltöm a webview-ba (ha egyáltalán lehet) a stripe fizetési oldalát, mert tudtommal app-on belüli vásárláskor a Google Pay-en keresztül történnie a fizetésnek.Ráadásul nem tudom elfogadja-e a Google és extra munka lenne, hogy offline is betöltsön (PWA?), bár utóbbi a legkisebb gondom.
Másrészről, minden más megoldás (még a React Native portolás) is dupla kódbázist eredményezne, ami nagyban nehezítené a jövőbeli munkát.
Szóval volt köztetek már valaki hasonló helyzetben? Mi lett végül a megoldás?
-
balazs1022
őstag
Sziasztok!
Poco X3 telefonom van. Szeretném MILC fényképezőgéppé alakítani. 4 kamera van a hátulján. Ebbol ketto semmire sem való. A 4 ből 3-nak ugyanolyan a csatlakozoja. Tettem bele még egy ugyan olyan 13mp-es kamerat (mint ami alapból benne van), az egyik makró lencse helyere. Sajnos nem is ismeri fel egyik alkalmazas sem. Nem lehet valahogy megoldani, hogy ugyanaz a kamera masik slot-ban is mukodjon? Mivel ugyanolyan kamerarol van szo ezert fel kellene h ismerje...
A következő lepes az lenne, hogy a lencseket kiveszem, es csak a pőre szenzor látszik ki, majd erre csatlakoztatnek objektiveket. A makró kamerat egyebkent meg tudtam igy csinálni, tudok raw-ban is fotozni vele. Csak keves a 2mp-es felbontas. Igy nez ki, mikor az érzékelő kilatszik:
[ Szerkesztve ]
-
vlevi
nagyúr
válasz amstro555 #5430 üzenetére
Igazából semi extra nincs benne, ahogy látom.
Természetesen kell egy engedély az SMS küldésére, és persze maga az SMS küldő metódus.
De, ahogy nézem ez egy nagyon-nagyon régi példa, mert, nem elég, hogy java-ban íródott (mostanában a kotlint preferálja a Google), de még az edittext-eket is a findviewbyid -vel keresi a képernyőn... :)
Az első példa az alapértelmezett SMS küldő applikációval küldi az SMS-, a második pedig az Android beépített SMS küldovel.Érdemes lehet a Google oldalán is utána nézni, hogy manapság mi az ajánlott modszer.
-
amstro555
tag
Sziasztok! Szeretnék egy kis segítséget kérni kezdő programozóként. Írtam egy androidos SMS.apk appot, amit riasztónak szeretnék használni: ha a giroszkóp érzékeli a telefon mozgását, SMS-t küld. Működik is, de csak a telefon gyári SMS küldő programjának adja át az adatokat: telefonszám + szöveg. Hogy lehetne megoldani, hogy küldje is el? Köszönöm! (appinventor.mit.edu oldalon írtam)
-
bucihost
senior tag
válasz bandi0000 #5426 üzenetére
Updateltem a workmanagert, de semmi változás.
def work_version = "2.7.1"
implementation "androidx.work:work-runtime:$work_version"
Van intent és pendingintent is. Meg is adtam neki a hiányzó flaget. De ez sem vezetett semmire.PendingIntent pendingIntent = PendingIntent.getActivity(service, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
-
bucihost
senior tag
Sziasztok! Adott egy online rádió hallgató alkalmazás. Fel raktam play áruházra is, viszont most alakítottam rajta kicsit és ment rá egy frissítés. Play áruház vissza dobta, hogy már csak SDK 31 (vagy felette) lehet. Átírtam, viszont innentől android 12-n elhasal az alkalmazás. Ki debugoltattam, és ez a hibaüzenet jön:
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Viszont ha visszaírom a forráskódban az SDK verziót 30-ra (compileSdkVersion 30, targetSdkVersion 30), és magát az apk filet telepítem android 12-re akkor minden további nélkül működik.Találkoztatok már ilyennel? Ha igen mi a megoldás? Netet bújtam, de az ottani megoldásokkal ugyan ez a felállás.
-
DanaL
tag
Sziasztok, Appsheet fejlesztésben tudna valaki segíteni?
-
fatal`
titán
válasz szabozsolt87 #5420 üzenetére
Nem jó topic, android szakmai topicba nézz át.
Az adb-t meg a fastbootot nem kell telepíteni, le tudod tölteni a command line toolst a googletől: [link]
#5421: Ne vicceljünk már ilyennel elvinni szervizbe és kicsengetni 10k-t.
[ Szerkesztve ]
-
domel
tag
Egy programozó szempontjából mi a fene az a custom rom? Mindenre kapok engedélyt? (pl. saját programból mobil hálózatot választok, vagy ilyesmi?)
A lenti (előző) témához csak annyit, hogy mi programozunk, nem foglalkozunk operációs rendszerek telepítgetésével, én a helyedben elvinném szervízbe hogy telepítsék vissza az eredeti oprendszert, kifizeted a kb 10e Ft-ot, aztán próbálgatod tovább, ha még van hozzá kedved -
szabozsolt87
tag
Sziasztok,
Szeretnék segítséget kérni tőletek a következő problémával kapcsolatban: Egy custom romot telepítettem a redmi note 10 pro készülékemre. Van belőlük jó néhány ezért próbálgatom őket. A legutóbbi alkalommal megváltoztatta a recoveryt. A twrp helyet feltett valami mást. Vissza szeretném rá tenni, hogy további romokat próbáljak ki, de az adb sdk valamiért nem tudom telepíteni 0 fájlt telepít és cmd-ből fastbootba nem tudok flashelni recoveryt. Eddig minden tökéletesen működött hiszen korábban már több alkalommal is megcsináltam. Próbáltam már win 10 és 11 operációs rendszerekkel is, de nem jó valamiért. Utána kerestem googleba, de nem tartám érdemben megoldást.
-
bandi0000
nagyúr
Mindig a tesztelhetőséget emelik ki, mint fő előny, nekem kicsit ilyen HTML CSS feelingem van, amit nem szeretek, sose tudtam normálisan, és hatékonyan alkalmazni Valahogy ez a xml-es dizájneres ide oda húzogatás nekem nagyon bejön.
Amúgy szerintem, ha szépen el vannak szeparálva, akkor átlátható az
Xbox One: bandymnc
-
bandi0000
nagyúr
Szerintem sokan, ên is szeretném, de nem biztos, hogy merném alkalmazni egy full új projektben, mert ha elakadok, akkor cumi van :D Bár ott a stack-o, de pl jelenleg a navigàció bonyolultabb, legalább is amikor legutóbb láttam, és egy 3. Féltől szàrmazó megoldást javasolnak, szinte olyan mint a NavigationComponent elött, akkor is egy másik könyvtárat kellett volna használni, ami megoldja
Xbox One: bandymnc
-
Zsoxx
senior tag
Szerintetek az Android-fejlesztők közül hányan ugrottak rá a Jetpack Compose-ra? Érdemes megtanulni?
-
thiclyoon
aktív tag
Ahogy írod (kivéve ez: "az összes, Balaton-nal kezdődő településnevet vissza kéne adnia" - ez nem igaz). A link szerint ezt az API-t akkor használd, ha teljes névre keresel ("Balaton", "Balatonfüred", és nem "Balatonfü"), és egy eredményre számítasz. Minden másra ott az Autocomplete.
[ Szerkesztve ]
-
Zsoxx
senior tag
Szerintetek a Google Geocode API-ja szándékosan van ennyire lebutítva? A
getFromLocationName()
függvényről beszélek, pl. ha átadom neki a "Balaton" szót, elvileg az összes, Balaton-nal kezdődő településnevet vissza kéne adnia, de csak a tó nevét kapom meg. Balatonfüredet még a "Balatonfü"-re se találja meg.
Gondolom, a fizetős Places API-nál nincsenek ilyen problémák, az tökéletesen működik.[ Szerkesztve ]
-
Nem azzal van baj, ha akarnám, szerintem nem okozna problémát átállni Javaról Kotlinra. Az más kérdés, hogy már eleve a Javát sem szeretem.
Pedig régen írtam programokat Turbo Pascalban DOS alá, azt élveztem. Meg írtam Linux alá C-ben, azt is élveztem. Írtam egy mini-közösségi oldalt, PHP backenddel, 5 nap alatt 500 felhasználóm lett
Az is jó volt.
Van egy saját web crawlerem is, Vala nyelven írtam, 0-24-ben fut egy Debian VPS-en, adatokat gyűjt a webről. Semmi értelme, de élveztem, amikor megírtam.
De az Androidos témát nem élveztem egy percig sem, csak azért csináltam, mert azt gondoltam, a mobilappokat a legkönnyebb monetizálni.
Na, nem sorolom tovább, nincs értelme -
bandi0000
nagyúr
válasz urandom0 #5406 üzenetére
Pedig attól, hogy félelmetes a kotlin, sokkalta jobb mint a java, és Android is rengeteget fejlődött, sokkalta egyszerűbb lett, gondold el, hogyha van egy formod 10-20 view-al, az 20db változó, + 20 db findViewById, sokkalta kompaktabb lett az egész
Amúgy még azt tudnám elképzelni, hogy változót hozott létre, btnLogin néven, és értéket adott neki, mert utána működik a dolog ugye
[ Szerkesztve ]
Xbox One: bandymnc
-
thiclyoon
aktív tag
persze mivel
"binding.btnLogin" != "btnLogin"
. ezzel annyira akartam rávilágítani, hogy ha megvan a (vagy egy) működő megoldás (ami itt a binding.-os lett), akkor minek rágódni azon hogy a másik nem működik? nem működik és kész, én még nem láttam olyan kódot amúgy ahol binding. nélkül működött volna. örülni kell hogy megvan a megoldás és haladni tovább, én úgy gondolom nem szabad fennakadni az apróságokon. számomra ebből annyi lenne a tanulság, hogy "a view-kat binding. előtaggal érem el innentől kezdve, noted", és kész. a fenti mind személyes vélemény, off vége[ Szerkesztve ]
-
-
thiclyoon
aktív tag
Kezdem nem érteni (én sem) #5400-as hozzászólásban már működött. az hogy
btnLogin
ként vagybinding.btnLogin
ként éred el, szerintem ne zavarjon, ez a téma is nagyon sokat fejlődött csak az elmúlt 2,5 év alatt (java-s findViewById, butterknife, kotlin synthetic, view binding + data binding), simán lehet hogy az oktató lehagyott valamit(amúgy bme infó msc-n is binding.xy-ként tanítják ha ez számít valamit )
-
Új hozzászólás Aktív témák
Hirdetés
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest