如何在android应用程序中获取当前位置?

Posted

技术标签:

【中文标题】如何在android应用程序中获取当前位置?【英文标题】:How to get current location in android app? 【发布时间】:2012-11-26 15:06:12 【问题描述】:

首先我为重复道歉,我知道有人问过这个问题,我试图跟进现有的答案,但它不起作用。因此,如果您能看到我的代码并说出错误或缺失的地方,那将对我有很大帮助。

这是活动,它仅使用日志(无 GUI)。

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity implements LocationListener 

    private LocationManager lManager;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        if (lManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
            lManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
                    0, 0, this);
        else
            Log.i("Test", "network provider unavailable");

        Location lastKnownLocation =
                lManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        if (lastKnownLocation != null) 
            Log.i("Test", lastKnownLocation.getLatitude() + ", "
                    + lastKnownLocation.getLongitude());
            lManager.removeUpdates(this);
         else
            Log.i("Test", "null");
    

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

    public void onLocationChanged(Location location) 
        Log.i("Test", "location changed: " + location.getLatitude() + ", "
                + location.getLongitude());
    

    public void onProviderDisabled(String provider) 
    

    public void onProviderEnabled(String provider) 
    

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

当我尝试运行应用程序时,一切似乎都正常,但纬度和经度不会显示在日志上。我正在使用具有网络位置的真实设备进行测试。

【问题讨论】:

您的代码看起来不错。 (微小的变化:如果有最后一个已知位置,我会询问是否有最后一个已知位置,然后才请求更新,而不是请求更新然后可能会取消更新。)您可能无法获得位置因为信号弱,网络过时,或者你没有等待足够长的时间......你也尝试过GPS吗? 我没有尝试 GPS,因为据说它比网络慢,而且我不需要它提供的精度。此外,我需要将室内的设备连接到 PC 以进行测试和查看日志。我有点希望它可以通过网络完成,我已经等了很长时间。需要多长时间? 在理想情况下,获取位置应该只需要几分钟,如果需要的时间超过几分钟,那么您不太可能收到信号。 (我必须走到外面才能解决问题……)考虑使用模拟位置进行测试。 获取纬度和经度的过程需要3到5秒,并且您在获取这些项目之前删除了Listener,我认为您必须延迟删除listener的过程才能获取经纬度 @Husam A. Al-ahmadi 谢谢,我确实将 getLastKnownLocation 调用放在了 Sam 最终提供的 requestLocationUpdates 调用之前,这也解决了这个问题。但是感谢您向我展示了这一点。 【参考方案1】:

我无法获得位置的原因是蜂窝公司没有提供该信息(NETWORK_PROVIDER 使用蜂窝天线三角测量来确定位置。蜂窝公司可以提供或拒绝您提供此信息)。

【讨论】:

以上是关于如何在android应用程序中获取当前位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android应用程序中获取当前位置?

如何获取android移动设备的当前位置经纬度?

如何在Android应用程序中获取当前的经纬度? [复制]

如何在 Android 中使用 gps 获取当前位置(街道、城市等)

Android:如何使用 GPS 提供程序获取离线当前位置?

如何同时使用 GPS 和网络提供商在 Android 中获取当前位置的纬度和经度值