从Android设备获取实际位置(不是最后一个)

时间:2014-10-23 18:21:07

标签: java android locationmanager

我想从Android设备获取实际位置,我知道有些函数会返回已注册的最后位置,我想按下我的应用程序上的按钮并知道当前位置,而不是最后一个

这是我的应用

中的lil代码段
if(GooglePlayServicesUtil.isGooglePlayServicesAvailable(MyActivity.this) == ConnectionResult.SUCCESS){
            //get location
            LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            if(manager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
                LocationRequest locationRequest = LocationRequest.create();
                locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
                locationRequest.setInterval(2000);
                locationRequest.setFastestInterval(1000);
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, locationListener);
            }else{
                Intent gpsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(gpsIntent);
            }

        }

此代码表示,在2秒和5米之后,我将在我的听众下面获得位置更新

 @Override
    public void onLocationChanged(Location loc) {
        if(locationObtained){
            return;
        }
        location = loc;
        locationObtained = true;
        progressDialog.dismiss();
    }

那么,我的工作做得好吗?我正在测试应用并且没有收到位置更新

2 个答案:

答案 0 :(得分:2)

当你从GPS获得位置时,可能需要一些时间,因为GPS模块需要找到卫星。因此,当GPS模块找到卫星时,您需要等待几分钟或几分钟。 如果WI-FI位置提供商可用,您可以更快地获得位置。

您可以在此处找到有关位置提供商的其他信息: http://developer.android.com/guide/topics/location/strategies.html

因为Android已经

GPS_PROVIDER and NETWORK_PROVIDER

您可以注册两者并同时从两个开始从onLocationChanged(位置位置)获取事件。到现在为止还挺好。现在问题是我们需要两个结果,还是我们应该采取最好的结果。据我所知,GPS_PROVIDER结果的准确度要高于NETWORK_PROVIDER。

更新:

例如,您有位置监听器:

LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
       //here you get locations from both providers
    }

    public void onProviderDisabled(String provider) {
    }

    public void onProviderEnabled(String provider) {
    }

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

你需要做那样的事情:

LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,locationListener);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,locationListener);

但在注册之前,您需要检查此设备上是否提供这些提供商,例如:

boolean network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
boolean gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

答案 1 :(得分:0)

如果您在建筑物内,可能很难获得GPS位置。如果您想在建筑物内部定位,请尝试将LocationManager.GPS_PROVIDERLocationManager.NETWORK_PROVIDER合并。