通过GPS寻找位置

时间:2013-12-10 15:13:14

标签: android

public class WhereamI extends Activity {

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_wheream_i);

        LocationManager locationmanager;
        String context = Context.LOCATION_SERVICE;
        locationmanager = (LocationManager) getSystemService(context);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(true);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        String provider = locationmanager.getBestProvider(criteria, true);
        Location location = locationmanager.getLastKnownLocation(provider);
        updatewithnewlocation(location);
        locationmanager.requestLocationUpdates(provider, 2000, 10,
                locationlistener);
    }

    private final LocationListener locationlistener = new LocationListener() {

        private Location location;

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

        @Override
        public void onProviderEnabled(String arg0) {
        }

        @Override
        public void onProviderDisabled(String arg0) {
            updatewithnewlocation(null);
        }

        @Override
        public void onLocationChanged(Location arg0) {
            updatewithnewlocation(location);
        }
    };

    private void updatewithnewlocation(Location location) {
        String latLongString;
        TextView Text1;
        Text1 = (TextView) findViewById(R.id.Text1);
        if (location != null) {
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            double alt = location.getAltitude();
            latLongString = "Lat: " + lat + " Lon " + lng + " Altitude "
                    + alt + "feet";
        } else {
            latLongString = "No Location Found: Sorry.";
        }
        Text1.setText("Your Current Position Is \n :" + latLongString);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.wheream_i, menu);
        return true;
    }

}

我编写了一个代码,通过GPS查找设备的当前位置。问题是设备大部分时间都没有给出任何位置。但是,当我在代码中进行一些更改并将更改(或启动应用程序。)上传到我的设备时,它会给出位置。 这个应用程序的目的是找到位置的变化,并给出long和lat值,甚至altitiude。我不知道该应用程序有什么问题。有人可以吗?

1 个答案:

答案 0 :(得分:0)

无论您使用GPS,NETWORK或哪种提供商,所有提供的工作都基于从本地(设备上)缓存获取位置的相同原则。

试试这个实验。改变你的物理位置(移动,距你现在大约200米)并加载谷歌地图,你的应用程序也会突然返回正确的坐标。这是因为谷歌地图知道如何触发本地缓存更新。启动应用程序后它为您提供位置的原因是您在代码中使用requestLocationUpdate触发本地缓存。因此,它会为您提供坐标,直到它获得新的坐标。