Android,来自IntentService的getLastLocation()

Android,来自IntentService的getLastLocation(),android,service,get,location,intentservice,Android,Service,Get,Location,Intentservice,我有一个IntentService,它可以获取用户位置,并根据它从internet下载一些数据。我面临的问题是,很多时候,服务在调用onConnected方法之前就被终止了。所以这个位置是空的。这种情况并不总是发生,但经常发生 我可以像asynctask那样以某种方式进行调用,但可以在用户按下按钮时从活动调用IntentService,也可以定期使用AlarmManager调用IntentService。所以我不知道另一种方法。我可以创建一个asynctask,首先获取位置,然后启动Intent

我有一个IntentService,它可以获取用户位置,并根据它从internet下载一些数据。我面临的问题是,很多时候,服务在调用onConnected方法之前就被终止了。所以这个位置是空的。这种情况并不总是发生,但经常发生

我可以像asynctask那样以某种方式进行调用,但可以在用户按下按钮时从活动调用IntentService,也可以定期使用AlarmManager调用IntentService。所以我不知道另一种方法。我可以创建一个asynctask,首先获取位置,然后启动IntentService。并在从AlarmManager调用服务时执行不同的操作。但我必须创建不同的代码,以便最终完成相同的工作

所以我的问题是,有没有办法解决这个问题,保持IntentService?还是有其他更好的方法

谢谢你

Ps:Ive遵循Android开发者的指南:


嗨,我给你推荐的是。。。正在创建将更新当前位置的服务。。。你用坐标给你的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;
然后在你的位置转换方法中,你可以对缝翼和长条翼进行充电

public void onLocationChanged(Location location)
    {
        sLat = Double.toString(location.getLatitude());
        sLong = Double.toString(location.getLongitude());
所以sLat和sLong他们将有位置,他们将随时提供给你

关于…

不要使用IntentService-使用常规服务,并且:

启动服务时开始侦听位置 当你得到一个位置后,启动一个后台线程来下载你的数据,如果你只想要一个位置,就停止位置更新 下载完成后立即致电以停止服务
所以,如果我理解正确,我会创建一个服务,它会一直监听位置。所以这个服务应该始终有一个有效的非空位置。然后我会保留我的IntentService,但在启动时已经准备好了一个有效的Location对象。对吗?顺便说一句,它会耗尽电池吗?如果你看一看,IntentService所做的就是创建一个单独的处理线程,并在该线程完成时停止服务。我的建议是自己控制生命周期——在启动处理线程并在完成后停止服务之前,先等待找到位置。你仍然不想一直听位置更新,因为这会耗尽电池。我自己如何控制生命周期?这就是stopSelf的作用-当你完成处理时停止服务。我不使用stopSelf。我在onCreate中连接LocationClient。并在onHandleIntent中完成所有的背景工作。然后,当所有的工作都在OnHandleContent中完成时,有时还没有调用onConnected。