Thursday, March 17, 2011

Android Location

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (null != loc) {
Double longitude = loc.getLongitude();
Double latitude = loc.getLatitude();
}

A manifiest-be pedig:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

Ez az utolso csak akkor kell, ha LocationManager.GPS_PROVIDER helyett valami mock location provider-t akarunk hasznalni. Ezt meg valahogy igy tehejuk meg:

String MOCK_LOC_PROVIDER_NAME = "mockLocationProvider";
...
lm.addTestProvider(MOCK_LOC_PROVIDER_NAME, false, false, false, false, false, false, false, 0, 5);
Location location = new Location(MOCK_LOC_PROVIDER_NAME);
location.setLatitude(32.23434);
location.setLongitude(-16.32525);
location.setTime(new Date().getTime());
lm.setTestProviderLocation(MOCK_LOC_PROVIDER_NAME, location);
lm.setTestProviderEnabled(MOCK_LOC_PROVIDER_NAME, true);

Es igy nezhetjuk meg, hogy mar hozzaadtuk-e a sajat location provider-unket (2-szer ugyanazt nem lehet hozzaadni mert akkor hiba lesz):
List providers = lm.getAllProviders();
if (providers.contains(MOCK_LOC_PROVIDER_NAME)) {...}