Friday, October 16, 2009

[android-developers] Re: trouble with programmatically adding mock location data

Frederik,
Did you ever find a way around this?   I am experiencing the same problem.

Wayne

On Mon, Sep 28, 2009 at 6:53 AM, Frederik Pfisterer <pfisterer@gmail.com> wrote:

Seems i'm talking with myself :-)
Seems like it's a bug though, filed: http://code.google.com/p/android/issues/detail?id=4036

On 28 Sep., 12:38, Frederik Pfisterer <pfiste...@gmail.com> wrote:
> Here is the code using a mock location provider. Basically my question
> is, why is the mock provider not returning the previously set mock
> location correctly. See last comment in code:
>
>         private GeoPoint getUserLocation() {
>
>                 LocationManager locationManager = (LocationManager)getSystemService
> (Context.LOCATION_SERVICE);
>
>                 if (!PRODUCTION_ENVIRONMENT){
>
>                         //Get some mock location data in the game
>                         locationManager.addTestProvider(MOCK_PROVIDER_NAME, true, false,
> true, false, false, false, false, Criteria.POWER_LOW,
> Criteria.ACCURACY_COARSE);
>                         Location location = new Location(MOCK_PROVIDER_NAME);
>                         location.setLatitude(32.64480);
>                         location.setLongitude(-16.90967);
>                         location.setTime(new Date().getTime());
>                         locationManager.setTestProviderLocation(MOCK_PROVIDER_NAME,
> location);
>                         locationManager.setTestProviderEnabled(MOCK_PROVIDER_NAME, true);
>
>                 }
>
>                 //i just want an approximate location so no high expectations here
>                 Criteria criteria = new Criteria();
>                 criteria.setAccuracy(Criteria.ACCURACY_COARSE);
>                 criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
>
>                 //this correctly retrieves the mock location provider
>                 String provider = locationManager.getBestProvider(criteria, true);
>                 if (provider != null) {
> //this is where the mock provider returns null ... why?
>                         Location location = locationManager.getLastKnownLocation(provider);
>                         return new GeoPoint((int)(location.getLatitude()*E6_LATLONG), (int)
> (location.getLongitude()*E6_LATLONG));
>                 }else return null;
>         }
>
> Might this be a bug in the API?
>
> On 27 Sep., 16:43, Frederik Pfisterer <pfiste...@gmail.com> wrote:
>
> > I am working on an application that requires an approximate position
> > of the user, so basically i am fine with any relatively recent
> > location data i can get. However I can't seem to get things right
> > using mock location data and would therefore appreciate your help.
> > The method i'm having tries to set mock location data for the gps
> > provider and tries to later retrievie it BUT:
> >    locationManager.setTestProviderEnabled("gps", true); seems to fail
> > because i do not get any active location provider from the location
> > manager.
> > When I tried using a mock location provider with addTestProvider and
> > give it my mock location, the LocationManager returns me this mock
> > provider with getProviders(true) but then getLastKnownLocation returns
> > null instead of the provided mock location.
>
> > Here is my code (see comments as well):
>
> >         private GeoPoint getUserLocation() {
>
> >                 LocationManager locationManager = (LocationManager)getSystemService
> > (Context.LOCATION_SERVICE);
>
> >                 if (!PRODUCTION_ENVIRONMENT){
> >                         //Get some mock location data in the game
> >                         Location location = new Location("gps");
> >                         location.setLatitude(32.64480);
> >                         location.setLongitude(-16.90967);
> >                         location.setTime(new Date().getTime());
> >                         locationManager.setTestProviderLocation("gps", location);
> >                         locationManager.setTestProviderEnabled("gps", true);
>
> >                         //retrieve the list of active providers for debugging purposes, the
> > activated mock gps provider is not returned here
> >                         List<String> locationProviders = locationManager.getProviders
> > (true);
> >                         locationManager.setTestProviderEnabled("network", true);
>
> >                 }
>
> >                 //i just want an approximate location so no high expectations here
> >                 Criteria criteria = new Criteria();
> >                 criteria.setAccuracy(Criteria.ACCURACY_COARSE);
> >                 criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
>
> >                 //this correctly retrieves a mock location provider but not the mock
> > enabled gps
> >                 String provider = locationManager.getBestProvider(criteria,true);
> >                 if (provider != null) {
> >                         //this is where the mock provider returns null
> >                         Location location = locationManager.getLastKnownLocation(provider);
> >                         return new GeoPoint((int)(location.getLatitude()*E6_LATLONG), (int)
> > (location.getLongitude()*E6_LATLONG));
> >                 }else return null;
> >         }
>
> > }
>
> > Thanks for any hints or requests for clarification!




--
Writing code is one of few things
that teaches me I don't know everything.

http://www.fuligin.com

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

No comments:

Post a Comment