【问题标题】:How to get current location in android app?如何在android应用程序中获取当前位置?
【发布时间】: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 调用之前,这也解决了这个问题。但是感谢您向我展示了这一点。

标签: android gps location locationmanager android-location


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多