Android mock gps provider

android, android-location, gps

Solution

From the Android docs on the location manager:

removeTestProvider() throws 
IllegalArgumentException    if no provider with the given name exists

So, if you're testing on the emulator, the settings for GPS might have been reset by the reboot (try checking your permissions and DDMS to enable it again). If on the device, you must have disabled GPS (go to Settings and enable GPS).

EDIT: Found something relevant: here. Basically there's something going on that seems erratic in the emulator. From the comments on that thread, try using `Criteria.ACCURACY_FINE` instead of `LocationManager.GPS_PROVIDER`, like:

    LocationManager locationManager = (LocationManager)context.getSystemService( Context.LOCATION_SERVICE );

    Criteria criteria = new Criteria();
    criteria.setAccuracy( Criteria.ACCURACY_FINE );
    String provider = locationManager.getBestProvider( criteria, true );

    if ( provider == null ) {
        Log.e( TAG, "No location provider found!" );
        return;
    }

Go through that thread for further information.

Problem

My code snippet is: ``` mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if(mLocationManager.getProvider(LocationManager.GPS_PROVIDER) != null) { mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER); } mLocationManager.addTestProvider(LocationManager.GPS_PROVIDER, "requiresNetwork" == "", "requiresSatellite" == "", "requiresCell" == "", "hasMonetaryCost" == "", "supportsAltitude" == "", "supportsSpeed" == "", "supportsBearing" == "", android.location.Criteria.POWER_LOW, android.location.Criteria.ACCURACY_FINE); location = new Location(LocationManager.GPS_PROVIDER); mLocationManager.setTestProviderEnabled( LocationManager.GPS_PROVIDER, true); // mLocationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, // location); location.setLatitude(FinalLatitudeIntArray[0]); location.setLongitude(FinalLongitudeIntArray[0]); mLocationManager.setTestProviderLocation( LocationManager.GPS_PROVIDER, location); ``` I'm getting the error: ``` java.lang.IllegalArgumentException: Provider "gps" unknown at android.os.Parcel.readException(Parcel.java:1326) at android.os.Parcel.readException(Parcel.java:1276) at android.location.ILocationManager$Stub$Proxy.removeTestProviderEnabled(ILocationManager.java:1097) at android.location.LocationManager.removeTestProviderEnabled(LocationManager.java:1130) ``` Please help me sorting out this error. To add. Earlier the application was running fine, but when I rebooted the system, the application started showing error.

Original source