De ce este locația falsă care sare înapoi la poziția reală (Programare, Android, Locația Android)

Don Box a intrebat.
a intrebat.

Am adăugat un furnizor de testare folosind LocationManager.GPS_PROVIDER ca nume de furnizor, așa cum este descris aici

https://mobiarch.wordpress.com/2012/07/17/testing-with-mock-location-data-in-android/

În aplicația Google Maps, văd că locația sare între locația simulată și locația reală, apoi revine la locația simulată.

De ce sare la locația reală și cum pot opri acest lucru?

Poate că am înțeles greșit cum se utilizează locațiile simulate. Nu am găsit nicio documentație oficială disponibilă.

1 răspunsuri
stefano cattaneo

Cel mai probabil ai configurat setările de locație în așa fel încât telefonul (și aplicațiile) să poată folosi atât locația de la senzorul GPS, cât și locația de la celule și wi-fi. De la venirea Fused Location Provider, modul în care sistemul îți extrage locația a devenit puțin mai neclar.

Atunci când falsificați poziția, puteți falsifica doar citirile senzorului GPS (acest lucru este valabil și pentru atunci când falsificați poziția prin intermediul setărilor simulatorului).Astfel, atunci când sistemul alimentează Google Maps cu o poziție de la senzorul GPS, acesta o oferă pe cea falsă, iar atunci când furnizează poziția de la alți senzori, aceasta va fi cea reală.

Pentru a testa dacă am dreptate, puteți comuta setările de locație la „Device only” și ar trebui să obțineți doar pozițiile false.

Din păcate, nu există nicio modalitate de a simula citirile celorlalți senzori.

Comentarii

  • Așadar, cum pot testa FusedLocationProviderClient folosind locații false? Există o modalitate de a cunoaște furnizorul „original” al obiectului Location (obținând „fused”)? –  > Por diman.
  • În ceea ce privește experiența mea cu FusedLocationProvider, nu mai puteți cunoaște sursa locației unice, aceasta este aproape sigur o modalitate pentru ca biblioteca Play Services Location să aibă un API care oferă locația într-un mod agnostic pentru senzori. Există o informație de „precizie” atașată locației, dar nu am găsit o modalitate de a potrivi această valoare cu senzorul, deoarece precizia poziției furnizate de wi-fi și de celule poate varia foarte mult în funcție de situație. –  > Por stefano cattaneo.
  • Am încercat FusedLocationProviderProviderClient.setMockMode care, conform documentației: „Furnizorii de bază (rețea și gps) vor fi opriți (cu excepția accesului direct la LocationManager) și vor fi raportate doar locațiile specificate în setMockLocation(Location)…”, dar obțin SecurityException: „trebuie să fie selectată ca aplicație de locație simulată în setările dezvoltatorului”, ceea ce nu are prea mult sens, nu vreau ca aplicația mea să fie simulată, vreau pur și simplu să trec în modul simulat. –  > Por diman.
  • Pentru a vă putea imita propria locație, trebuie să fiți o aplicație simulată recunoscută la nivel de sistem. Acest lucru face ca existența lui .setMockMode să fie destul de confuză. –  > Por stefano cattaneo.
  • Cred că dezactivarea rețelei și a gps-ului este cu siguranță ceva ce majoritatea aplicațiilor nu ar trebui să poată face fără permisiuni suplimentare. O modalitate (proastă) de a imita locația ar putea fi abstractizarea stratului care furnizează locația și comutarea implementării dacă vă aflați în modul „test” sau în anumite variante de aplicații. Desigur, acest lucru nu va mai funcționa imediat ce aplicația este ucisă în fundal, în plus, nu va funcționa pentru tranzițiile geofence. –  > Por stefano cattaneo.