无法获得所有用户位置的android

时间:2013-11-23 17:13:25

标签: android gps android-location

我无法理解整个获取用户位置。我按照了LocationManager的教程。它从GPS提供商处获得最后的已知位置。据我所知,一些用户没有最后知道的位置,它返回NULL。

我假设下面的代码如果NULL将使用GPS并尝试获取用户位置。但事实并非如此。如何强制android检索用户位置?而且不只是显示我的NULL消息而不起作用?

setContentView(R.layout.beer_location_list);

        String title = "Nearby Breweries";
        TextView topTitle = (TextView) findViewById(R.id.beerLocationTitle);
        topTitle.setText(title);

        //get user location

        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        if(location != null)
        {
            double longitude = location.getLongitude();
            double latitude = location.getLatitude();

            //construct url
            String url = "myURl";

            Log.d("urlTest",url);

            //async task goes here
            new GetNearbyBreweries(this).execute(url);
        }

        else{
            //pop toast saying cant get location
            Toast.makeText(getApplicationContext(), "Can not get your location at this time", Toast.LENGTH_LONG).show();

        }

更新

在查看了一些回复之后,为什么我不能做这样的事情来在每次打开此活动时获取用户位置:

  final LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        criteria.setAltitudeRequired(false);
        criteria.setSpeedRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(false);

        LocationListener listener = new LocationListener();


        manager.requestSingleUpdate(criteria, listener, null);

我用

覆盖位置监听器
@Override
    public void onLocationChanged(Location lastKnownLocation) {
        if (lastKnownLocation != null) {
            // whatever needs to be done
        }
    }

但是我收到了错误:LocationListener是抽象的,无法在新的LocationListener();

行上实例化

3 个答案:

答案 0 :(得分:2)

通过注册LocationListener并使用requestSingleUpdate请求使用当前位置进行更新,为您的位置申请单一更新。我假设您的应用清单中列出了正确的权限。请注意,您可能不会收到更新,特别是因为较新的Android版本允许用户禁止对应用进行位置访问。

LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setSpeedRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);

LocationListener listener = new LocationListener() {
        @Override
        public void onLocationChanged(Location lastKnownLocation) {
            if (lastKnownLocation != null) {
               // whatever needs to be done
            }
        }

manager.requestSingleUpdate(criteria, listener, null);

答案 1 :(得分:2)

关于问题的最后更新,它是一个抽象类,因此无法实例化。您需要找到实现它的具体类或自己实现它。

查看有关如何使用location API的完整示例 http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/ http://www.vogella.com/articles/AndroidLocationAPI/article.html

您需要让您的活动实现LocationListener类,并且您可以覆盖函数而无需创建新对象。

public class myActivity extends Activity implements LocationListener

答案 2 :(得分:1)

getLastKnownLocation仅检索该历史信息(如果存在) - 它不会启动位置提供程序以获取锁定。

如果getLastKnownLocation返回null,您应该使用requestLocationUpdates方法获取用户的当前位置。

另外,请注意,如果最近没有获取位置锁定,getLastKnownLocation返回的位置可能会非常旧,因此您可能需要检查时间戳并假设它的年龄超过a时已过时一定的门槛。