android-如何在不打开地图/导航应用程序的情况下更新位置

Posted

技术标签:

【中文标题】android-如何在不打开地图/导航应用程序的情况下更新位置【英文标题】:android- How to update the location without opening the maps/navigation app 【发布时间】:2013-07-18 07:13:40 【问题描述】:

我想获得准确且准确的当前位置。为此,我使用了位置管理器requestLocationUpdates() 方法,但调用onLocationChanged() 方法将花费大量时间。所以我将计时器设置为 20 秒。我的意思是onLocationChanged() 方法即使在 20 秒后也没有被调用,然后我决定采用最后一个已知位置。在这里,我面临着问题。 getLastKnownLocation() 返回 null。

但我想要位置。在这里,我找到了一个解决方案。这是因为测试设备没有与 gps 提供商的最新位置更新。所以我们需要手动打开地图/导航应用程序,然后它会返回位置。我们应该做什么来获取位置而不是打开地图应用程序。我认为我们应该像地图应用一样进行位置更新。我们如何在不打开它的情况下实现它。

// 使用 requestLocationUpdates 获取当前位置

public void getLocation() 

    locationManager.requestLocationUpdates(strProvider, 0, 0,
            CurrentlocationListener);



LocationListener CurrentlocationListener = new LocationListener() 
    @Override
    public void onLocationChanged(Location location) 
        // TODO Auto-generated method stub
        if (location != null) 

            locationManager.removeUpdates(this);
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            String strCurrentLatitude = String.valueOf(lat);
            String strCurrentLongitude = String.valueOf(lng);

            System.out
                        .println("Current Latitude and Longitude(onLocation Changed): "
                                + strCurrentLatitude
                                + ","
                                + strCurrentLongitude);
        
    

    @Override
    public void onProviderDisabled(String provider) 

    @Override
    public void onProviderEnabled(String provider) 

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

//使用lastknownlocation获取当前位置。

   String location_context = Context.LOCATION_SERVICE;

    locationManager = (LocationManager) getSystemService(location_context);
    Criteria crit = new Criteria();
    crit.setAccuracy(Criteria.ACCURACY_FINE);
    strProvider = locationManager.getBestProvider(crit, true);
    Location location = locationManager
                        .getLastKnownLocation(strProvider);
                System.out.println("location(geoPoint1): " + location);

                String strCurrentLatitude = "0", strCurrentLongitude = "0";

                if (location != null) 
                    strCurrentLatitude = String.valueOf(location
                            .getLatitude());
                    strCurrentLongitude = String.valueOf(location
                            .getLongitude());
                

【问题讨论】:

显而易见的方法是在关闭应用程序之前保存坐标并在启动后加载它们。在这里寻找另一种解决方案:***.com/questions/9885871/… @trololo:我想要当前位置,即使是第一次打开应用程序,在这种情况下我们没有正确的坐标。这里我们应该如何获取位置? 【参考方案1】:

无论您在OnLocationChanged() 中做什么都是正确的。现在用这个替换 LocationManager 的代码。它会起作用的。

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location
            Location location = locationManager.getLastKnownLocation(provider);

            if (location != null) 
                onLocationChanged(location);



            

            locationManager.requestLocationUpdates(provider, 1000, 0, this);

        

谢谢。 :)

【讨论】:

我们如何调用onLocationChanged(location)?在我的我收到此错误 RB_UpcomingExits 类型的方法 onLocationChanged(Location) 未定义 我认为,它会持续为您提供 lat lon 值,此后您不会得到 null。如果是。您可能需要将其标记为答案。谢谢。

以上是关于android-如何在不打开地图/导航应用程序的情况下更新位置的主要内容,如果未能解决你的问题,请参考以下文章

Android Auto - 如何显式打开谷歌地图进行导航以显示在汽车屏幕上(intent.setPackage 不起作用)

2 android中的导航栏(顶部和底部)

Android 打开第三方地图App进行导航

从网站打开 GoogleMaps 应用程序以在 android 上导航

Android 组件导航如何防止地图页面在每次点击时刷新

android studio高德地图加载离线地图如何做