开发者

Getting null from 'getLastKnownLocation' on SDK

开发者 https://www.devze.com 2022-12-14 17:12 出处:网络
I have a problem related to the Location API. I tried the following code: LocationManager lm = (Loc开发者_运维百科ationManager)getSystemService(Context.LOCATION_SERVICE);

I have a problem related to the Location API.

I tried the following code:

LocationManager lm = (Loc开发者_运维百科ationManager)getSystemService(Context.LOCATION_SERVICE);
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);

loc is always null, when getLastKnownLocation() is called.

What is wrong?


Along with the permissions in your AndroidManifest.xml file, have you registered a location listener?

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS, 100, 1, locationListener); 

Then have a method, in this case locationListener, to complete your task

private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
    latitude = location.getLatitude();
    longitude = location.getLongitude();
}


If you're running the code in the emulator, any calls to get the GPS location will return null until you explicitly update the location (via Eclipse or ADB).


I had the same problem as you, I always receive a null Location object, But finally it was solved in an easy way. You must have a valid GPS location, so, if the GPS is not enabled and you dont't have enough signal, the Location object will be ALWAYS null.


Have you set the permissions in your AndroidManifest.xml? You need these permissions in order to access the user's location with an application:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />


Here's something you can use:

LocationManager lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = lm.getBestProvider(criteria, false);
Location loc = lm.getLastKnownLocation(bestProvider);

last_lat = loc.getLatitude();
last_lng = loc.getLongitude();


You need the instance Of LocationManager like this:

First Instance:

   LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

Wrong:

Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);

Correct:

Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号