开发者

location manager android problem

I am trying to get a user's location when a button is clicked.

I have the following code in my button onclick listener:


locationManager = (LocationManager) getS开发者_Python百科ystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
bestProvider = locationManager.getBestProvider(criteria, false);
Location currentLocation = locationManager.getLastKnownLocation(bestProvider);
Log.e(tag,"reached till here");
location = Double.toString(currentLocation.getLatitude()) + " " + Double.toString(currentLocation.getLongitude());
Toast.makeText(getApplicationContext(), location, Toast.LENGTH_LONG);
MyLocation.setText(location);

I am getting the the output reached till here in logcat. After that the application stops and asks me to force close it. I initially did some searching and found out that getLatitude and getLongitude return double values. So I corrected the code. But still I am getting an error. What am I doing wrong?

EDIT : The logcat error:

Got RemoteException sending setActive(false) notification to pid 796 uid 10036

I think currentLocation is returning null


If your are testing your app in the Emulator you probably don't have any provider and the currentLocation object is null and that is why getLatitude() and getLongitude() will give a NPE.

Edit: as the @grinnner said, from the DDMS perspective you can simulate the sending of location coordinates. Open the DDMS Perspective in eclipse and in the LocationControls tab set the Longitude and Latitude and then click send. Be sure that the focus in the Devices tab is on the emulator that you are running your app on.


If you don't have a last known location (just do a simple null check for the value returned), then you need to add a location listener to get a location. Something like this:

// Start listening for a new location.
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String bestProvider = lm.getBestProvider(new Criteria(), true);    
mMyLocationListener = new MyLocationListener();
lm.requestLocationUpdates(bestProvider, 0, 0, mMyLocationListener);

private class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {
        // Do what you need to do with the longitude and latitude here.
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
}

You should also remember to remove the location listener as soon as you no longer need it:

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.removeUpdates(mMyLocationListener);
mMyLocationListener = null;
0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜