Helymegosztás a QT-ügyfélen
Hogy használjuk?
A kis felhasználás
A beszélgetés során a felhasználó a helyszíntárgyaló ikonra kattintva megjeleníti a térképet. Ha a készülékben a Location Services
engedélyezett, a felhasználó helyzetét a térképen megmutatják, valamint a helyüket megosztó összes többi tag helyét (a kiválasztott fiók összes beszélgetéséből). A felhasználó a helyszínmegosztás bekapcsolásával és kikapcsolásával kapcsolhatja a helyszínmegosztás gombokat.
Ha egy felhasználó megosztja a helyét egy beszélgetésben, a beszélgetés ikonjára egy piros hely ikonja jelenik meg. Ha a felhasználó egy másik tagtól egy helyet kap, egy narancssárga hely ikonja megjelenik minden olyan beszélgetésben, amelyben a tag jelen van.
A felhasználó a térképen kapcsolatba léphet a frissítés, a zoom, a mozgás és a bezárás révén. A térképet rögzíteni vagy lecsapni is lehet. Amikor a térképet lecsapják, akkor újra rögzíteni lehet, ha a felhasználó a megfelelő fiókban van. Ez a funkció lehetővé teszi a felhasználó számára, hogy a térképet láthatónak tartsa, miközben továbbra is Jami-t használja.
Fejlesztett felhasználás
Több részesedés
Szénárium
A felhasználó már megosztja a helyszínt az A és a B beszélgetésekkel.
Figyelem
Ha a felhasználó C-re vált, a térkép még mindig látható, és a felhasználónak két lehetőség van.
Kattintson a helyszínmegosztási gombra, hogy megosztsa a C beszélgetés tagjai is a helyszínt.
Kattintson a helymegosztási vég gombra. Ez egy felbukkanó megjelenik, amely lehetővé teszi a felhasználó számára, hogy vagy teljesen letiltsa a helymegosztást, vagy csak abbahagyná a C beszélgetés tagjaihoz való helymegosztást.
A csuklót
Ha a névlap nem áll, a felhasználó nem képes kattintani a helymegosztó gombot, mert a névlap már nem kapcsolódik a beszélgetéshez. Az új emberekkel való megosztás megkezdéséhez a felhasználónak újra kell állítania a névlapot.
Több számla
Minden számlának saját egyedi térképe van. Ha a felhasználó a A számlán lévőken kinyitom a térképet, majd átáll a B számlára és kinyitom a térképet, két térképet láthatunk. A A és a B számlákat tartalmazó térképe a számlákkal megosztott pozíciókat mutatja, és teljesen elkülönül egymástól
Hogyan működik (műszaki)
Bevezetés
Ezt a jellemzőt három részre osztjuk:
Küldöm a pozíciómat.
A pozíció megszerzése
A pozíció megjelenítése
A helyszín meghatározásához [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API-t használnak.
Posíció küldése
Amint megnyitják a térképet, a Positioning
osztály gondoskodik a jelenlegi pozíció felhozataláról a QGeoPositionInfoSource
osztály segítségével a QtPositioning
modul. A pozíciót majd JSON formátumra alakítják és továbbítják a positionManager
hez. Ez a osztály koordinálja az egész pozíciómegosztási folyamatot.
A helyi
lokálisPositionReceived
jeleteken keresztül, hogy a felhasználó lássa saját helyzetétA DHT-en az
positionShareConvIds_
listában található összes beszélgetéshez. Ez a lista tartalmazza a felhasználó által megosztott helyzethez kapcsolódó összes beszélgetés kulcsait. Ebből a kulcsból minden résztvevő URI-jét kapják meg, és egy pozíció üzenetet küld minden résztvevőnek.
A pozíció JSON formája a következő:
Tipp (állási vagy állási üzenet)
Szélesség
Hossza
Idő (a QtClient által nem használt)
Az adatok példája: {\"lat\":45.51616583988481,\"hosszú\":-73.620693,\"idő\":1671658862000,\"típus\":\"Pozíció\"}
A helyzet elküldése a rendszerfolyamatnak az szerző URI-jét is továbbítja.
Amikor a felhasználó nem osztja meg álláspontját egy beszélgetés során, a beszélgetés azonosítóját egyszerűen eltávolítják a positionShareConvIds_
listáról.
A pozíció megszerzése
Ha egy pozíció érkezik, a „onPositionReceived() ” szállat indult. Akár a QtPositioning
modulból származó helyi pozíció, akár egy másik kapcsolatból származó pozíció.
Beadott (az URI nem szerepel a listában)
Frissített (a URI már jelen van a listán)
Törölt (típus = „Stop”)
A pozíció az positionObject
típusú objektum formájában tárolódik a listán. Ez a típus lehetővé teszi, hogy minden pozícióra vigyázzanak.
A pozíció megjelenítése
Amikor egy pozíciót kapunk (slot onPositionReceived()
) indított), a pozíciót továbbítjuk a Qml-hez, amely a [OpenLayers] (https://openlayers.org/) JavaScript könyvtárába küld az információkat. A Qt WebEngine
modul lehetővé teszi a könyvtár webtechnológiája és a Qml közötti híd létrehozását. Minden pozíciót egy réteg adja a térképen.