【问题标题】:Android, getLastLocation() from IntentServiceAndroid,来自 IntentService 的 getLastLocation()
【发布时间】:2014-02-24 20:41:41
【问题描述】:

我有一个 IntentService 应该获取用户位置,并根据它从 Internet 下载一些数据。我面临的问题是,很多时候,服务在 onConnected() 方法被调用之前就完成了。所以位置为空。它不会一直发生,但经常发生。

我可以做一些不同的事情(比如异步任务),但是可以从活动(当用户按下按钮时)或使用 AlarmManager(定期)调用 IntentService。所以我不知道另一种方法。好吧,我可以创建一个异步任务,它首先获取位置,然后启动 IntentService。当从 AlarmManager 调用 Service 时,做一些不同的事情。但我必须创建不同的代码,最后做同样的事情。

所以我的问题是,有没有办法解决它,保留 IntentService?或者还有其他更好的方法吗?

感谢您的建议。

Ps:我已经按照 Android Developers 的指南进行操作:

https://developer.android.com/intl/es/training/location/retrieve-current.html

【问题讨论】:

    标签: android service get location intentservice


    【解决方案1】:

    不要使用IntentService - 使用常规的Service 并且:

    1. 在您的服务启动时开始监听位置
    2. 获取位置后,启动后台线程以下载数据(如果您只需要一个位置,则停止位置更新)
    3. 下载完成后致电stopSelf 停止服务

    【讨论】:

    • 所以,如果我理解正确,我会创建一个始终监听位置的服务。所以这个服务应该有一个有效的(不是空的)位置。然后我会保留我的 IntentService,但在启动时已经准备好有效的 Location 对象。这是正确的吗?顺便说一句,它会耗尽电池吗?
    • IntentService 所做的一切(如果您查看source code)就是创建一个单独的处理线程并在该线程完成时停止服务。我的建议是自己控制生命周期 - 等到你有一个位置,然后再启动处理线程并在完成后停止服务。您仍然不想一直收听位置更新(因为这会耗尽电池电量)。
    • 我自己如何控制生命周期?
    • 这就是 stopSelf 的用途 - 在您完成处理后停止服务。
    • 我不使用 stopSelf。我在 onCreate 中连接 LocationClient。并在 onHandleIntent 中完成所有后台工作。那么当所有的工作都在onHandleIntent中完成后,有时候onConnected还没有被调用。
    【解决方案2】:

    您好,在您的情况下,我建议...创建一个将更新当前位置的服务...然后您使用坐标向您的 var 收费...让我给您举个例子

    首先声明变量

    public class MyService extends Service{
    private LocationManager mLocationManager = null;
    private static final int LOCATION_INTERVAL = 1000;
    private static final float LOCATION_DISTANCE = 10f;
    String sLat;
    String sLong;
    

    然后在您的 on locationChange 方法上收取 sLat 和 sLong

    public void onLocationChanged(Location location)
        {
            sLat = Double.toString(location.getLatitude());
            sLong = Double.toString(location.getLongitude());
    

    所以 sLat 和 sLong 他们将拥有该位置,并且它们将在您需要时随时可用......

    问候...

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多