【问题标题】:GPS doesn´t work in IntentServiceGPS 在 IntentService 中不起作用
【发布时间】:2013-03-01 11:01:03
【问题描述】:

我的服务中有以下代码:

    LocationManager locationManager = 
         (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    String provider = 
          locationManager.getProvider(LocationManager.GPS_PROVIDER).getName();
    Location location = locationManager.getLastKnownLocation(provider);
    while(true)
     {
       if(...)//every 5 seconds it gets into
         {
                ....//control if the location is not null
            lat = location.getLatitude();
            lon = location.getLongitude();
            alt = location.getAltitude();
            Log.i(TAG, "Latitude: "+lat+"\nLongitude: "+lon+"\nAltitude: "+alt);

         }
        else {
            Log.i(TAG, "Error!");
            }
    }

这种代码在我的模拟器中有效(GPS 被插入到Log),但在我的移动设备中,此代码到达else 分支。有人可以告诉我问题出在哪里吗?在我的代码中还是在我的移动设备中?提前致谢。

P.S.:GPS 已开启,在其他应用中也可以使用。

【问题讨论】:

    标签: android gps android-location


    【解决方案1】:

    getLastKnownLocation() 不会从 GPS 提供商获取后续位置。它将返回(顾名思义)某些代码请求的最后一个已知位置。我假设您在条件中检查位置不是 null,这未在您的代码中显示。如果设备通过其他方式“确定”最后一个已知位置太旧或不可靠,则该位置为空。您需要请求位置更新并提供位置侦听器以重复获取位置。

    有很多可用的教程。 Here 是一号。其中。

    【讨论】:

    • 谢谢,但我有一个问题。如果我使用您的教程创建一个 LocationListener(活动),如果屏幕关闭或有人打电话,它会继续执行它的任务吗?
    • LocationListener 不需要是一个活动。它只是一些实现 LocationListener 接口的类。如果屏幕关闭或有人来电(如果您正在与某些活动交互,它当然不可见),它将起作用。但是,如果 CPU 断电,您将无法获得更多更新。为了防止后者,您需要获得一个 WakeLock 来防止 CPU 被关闭。
    • 所以,如果我只创建 f.ex。 public class MyClass implements LocationListener,这个类也将在我描述的这些情况下运行?
    • 是的,除非手机停止 CPU(它会在屏幕变黑一段时间后执行此操作,请参阅我评论中的 WakeLock 备注,如果您需要了解有关 WakeLocks 的更多信息,请在此论坛中搜索它们!)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2019-05-28
    • 2012-05-18
    相关资源
    最近更新 更多