在Android中查找当前位置的纬度和经度[重复]

Posted

技术标签:

【中文标题】在Android中查找当前位置的纬度和经度[重复]【英文标题】:find current location latitude and longitude in Android [duplicate] 【发布时间】:2011-01-16 01:47:33 【问题描述】:

我想在一个 android 应用程序中查找我当前位置的纬度和经度。我只是在手机稳定时才需要它。

我的代码是:

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


    locationManager.requestLocationUpdates(                
             LocationManager.GPS_PROVIDER,0,0,(LocationListener) this);
    updateWithNewLocation(location);
    

    private void updateWithNewLocation(Location location) 
    TextView myLocationText = (TextView)findViewById(R.id.myLocationText);

    String latLongString;

    if (location != null) 
    double lat = location.getLatitude();
    double lng = location.getLongitude();
    latLongString = "Lat:" + lat + "\nLong:" + lng;
     else 
    latLongString = "No location found";
    

    myLocationText.setText("Your Current Position is:\n" +
    latLongString);
    

在模拟器上运行它后,我总是发现“找不到位置”。为什么会这样?

【问题讨论】:

您能否向我们展示您的代码,以便我们了解它为什么不起作用?这个问题已经在 *** 上被问过很多次了。进行搜索,您可能已经找到问题的答案。 你不会从你的模拟器获得 GPS 。在真机上试试。 【参考方案1】:
public class GPSmap extends Activity 

    GeoPoint geoPoint;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        LocationManager locManager;
        setContentView(R.layout.main);
        locManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L,
            500.0f, locationListener);
        Location location = locManager
                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location != null) 
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
        
    

    private void updateWithNewLocation(Location location) 
        TextView myLocationText = (TextView) findViewById(R.id.text);
        String latLongString = "";
        if (location != null) 
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            latLongString = "Lat:" + lat + "\nLong:" + lng;
         else 
            latLongString = "No location found";
        
        myLocationText.setText("Your Current Position is:\n" + latLongString);
    

    private final LocationListener locationListener = new LocationListener() 

        public void onLocationChanged(Location location) 
            updateWithNewLocation(location);
        

        public void onProviderDisabled(String provider) 
            updateWithNewLocation(null);
        

        public void onProviderEnabled(String provider) 

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

如果你会使用这个代码,你会得到答案。

【讨论】:

如果你会使用这个代码,你会得到答案......但没有接受......耻辱。【参考方案2】:

GPS 收音机并非一直保持开启状态,因为它会严重耗尽电池电量。当您拨打getLastKnownLocation() 时,收音机可能已关闭。

您需要先执行您的requestLocationUpdates(),然后等待向您的LocationListener 提供修复。在此之后的任何时间(直到你 removeUpdates()),getLastKnownLocation() 应该返回一个非 null 值。

【讨论】:

“任何时候......直到你 removeUpdates(), getLastKnownLocation() 应该返回一个非空值” - 所以如果一个人调用 removeUpdates() getLastKnownLocation() 返回的位置之后将是空的?比如说,它不会持续到重新启动吗?这是在某处记录的吗? @Mr_and_Mrs_D: “所以如果调用 removeUpdates() 之后 getLastKnownLocation() 返回的位置将为空?” - 更多的是无法保证您将继续获得多长时间非null 值。 “这在某处有记录吗?” ——不,这就是重点。只有当您知道设备正在积极寻找位置数据时,您才能确信getLastKnownLocation() 有机会返回非null 数据。一旦不再请求定位修复,所有的赌注都没有了。 a-ha - 因此,即使启用了提供程序 getLastKnownLocation() 也会在某个时间点后开始返回 null(我猜任何应用程序从上次请求位置更新时及时删除) - 任何讨论该问题的链接?有人会假设一旦获得最后一个位置,这将保持可用直到重新启动 - 或直到(所有?相关?)提供者禁用可能 @Mr_and_Mrs_D:“getLastKnownLocation() 将在某个时间点后开始返回 null”——同样,更多的是这种行为是未记录的,因此本质上是不可靠的。 “人们会假设一旦获得最后一个位置,这将保持可用直到重新启动 - 或者直到(所有?相关?)提供商可能被禁用” - 我当然不会假设。 谢谢 - 所以简而言之,javadoc 应该是“仅在(您或其他一些应用程序发出)调用 requestLocationUpdates() 之后调用此方法” - 顺便说一句,我今天发现了 this,它将为您节省一些打字时间:)【参考方案3】:

我搜索了很多教程,但找到了最好的一个:

使用CriteriaBestProvider

    /** PROCESS for Get Longitude and Latitude **/
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);

// getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Log.d("msg", "GPS:"+isGPSEnabled);

// check if GPS enabled     
if(isGPSEnabled)
    /*
    longitude = 70.80079728674089;
    latitude =  22.29090332494221;
     */
     Criteria criteria = new Criteria();
     String provider = locationManager.getBestProvider(criteria, false);
     Location location = locationManager.getLastKnownLocation(provider);

    //new LoadPlaces().execute();
    //Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(location != null)
    
        longitude = location.getLongitude();
        latitude = location.getLatitude();
        Log.d("msg", "first lat long : "+latitude +" "+ longitude);
        //new LoadPlaces().execute();
    else
    
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() 

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) 
                // TODO Auto-generated method stub

            

            @Override
            public void onProviderEnabled(String provider) 
                // TODO Auto-generated method stub

            

            @Override
            public void onProviderDisabled(String provider) 
                // TODO Auto-generated method stub

            

            @Override
            public void onLocationChanged(Location location) 
                // TODO Auto-generated method stub
                longitude = location.getLongitude();
                latitude = location.getLatitude();
                Log.d("msg", "changed lat long : "+latitude +" "+ longitude);
            
        );
    


else

    showAlertforGPS();

【讨论】:

【参考方案4】:

默认情况下,模拟器可能没有任何关联的位置。所以它不给任何东西。

要发送位置,请转到 Eclipse 中的 DDMS 透视图,输入纬度和经度,然后单击发送。然后您将能够在您的应用程序中看到它。

如果您还有任何问题,请告诉我。

【讨论】:

以上是关于在Android中查找当前位置的纬度和经度[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用纬度和经度在Android中获取位置名称[重复]

如何在Android中获取经度和纬度

如何在Android中将当前位置作为纬度和经度?

查找具有纬度和经度的记录[重复]

Android:如何获取经度和纬度的当前位置?

在获取当前纬度和经度时获取空对象引用 [重复]