【问题标题】:Location is null on device设备上的位置为空
【发布时间】:2013-03-11 23:30:06
【问题描述】:

我正在真实设备上测试我的应用,并在 GPS 开启时获取null 位置。当我使用虚拟坐标在模拟器上进行测试时,它工作正常。怎么了?

locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
listener = new MyLocationListener();
viaGps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
viaNetwork = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!viaGps && !viaNetwork) {
    tracking = false;
} else {
    if (viaGps) {
        Log.d("", "gps is on");
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    }else if (viaNetwork) {
        Log.d("", "network is on");
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    }
    if (location == null) {
        Log.d("", "location not fouond");
    }

【问题讨论】:

  • 最后已知位置可以为空,但您应该在 LocationListener 中获取位置修复,
  • 你手机里有sim卡吗?
  • 是的,我的手机里确实有 sim 卡
  • @vmerror 但为什么会这样。我的意思是在模拟器中给出虚拟坐标之前,最后一个已知位置可能为空,这也很有意义。但在真实设备中,有可用的真实坐标。那么为什么我最后一个已知位置为空
  • 答案可以在这里找到:stackoverflow.com/a/12238356/1199267

标签: android


【解决方案1】:

试试这个,解决了我的问题

  double latitude = gps.getLatitude();
  double longitude = gps.getLongitude(); 

还要检查您的权限

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>

【讨论】:

    【解决方案2】:

    你需要一个位置监听器:

    关注documentation

    更新:

    你也可以试试这个简单的方法:What is the simplest and most robust way to get the user's current location in Android?

    【讨论】:

    • 我已经注册了一个名为 locationListener 的位置监听器。
    • 你看懂文档了吗?请参阅我的更新以了解其他实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2021-10-31
    相关资源
    最近更新 更多