Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check for the presence of a GPS sensor?

Tags:

android

gps

I'm writing a method that will return true if there's a GPS sensor present and enabled, but returns false if it's absent or switched off. It's proving hard because...

hasSystemFeature("FEATURE_LOCATION_GPS")  // on PackageManager

Returns false, whether the device has a GPS or not. So even on a device that has one, and it's switched on, it still returns false. Seems completely wrong to me, but I can't see why.

isProviderEnabled("gps")   // on LocationManager

Returns true, even on a device I have here that has no GPS hardware at all. That also seems completely counter-intuitive.

I accept these results could be because I'm missing something, the SDK isn't intuitive, or perhaps even that the devices I'm testing with are behaving strangely.

What am I missing?

like image 950
Ollie C Avatar asked Feb 17 '11 16:02

Ollie C


2 Answers

This should work. Is there any error messages in logcat when you make this call?

PackageManager pm = getPackageManager();
boolean hasGps = pm.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
like image 179
Robby Pond Avatar answered Oct 15 '22 21:10

Robby Pond


In case when device does not have GPS hardware the following is true:

locationManager.getProvider(LocationManager.GPS_PROVIDER) == null;

Where

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

In my case the *hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)* returns true even if device does not have GPS. So it's not reliable.

like image 20
far.be Avatar answered Oct 15 '22 22:10

far.be