我正在开发一款将gps数据发送到服务器的原型Android应用。当我直接从我的MainActivity类调用我的类GetLocation时,我有一些工作。但是,我希望这真的可以作为后台服务。我尝试使用类似的代码,但由于某种原因,LocationListener的函数永远不会被调用(我唯一看到的是onLocationChanged)。我误解了这是如何工作的吗?谢谢。这是我的代码。
public class GetLocation {
...
public GetLocation(Context myContext, String hostParam)
{
this.context = myContext;
sendMessage = false;
sendData = new SendData(Constants.HOST_NAME);
locationManager = (LocationManager) context.getSystemService((Context.LOCATION_SERVICE));
this.host = hostParam;
locationListener = new LocationListener()
{
@Override
public void onLocationChanged(Location location)
{
String sentence = AssembleSentence.assembleNMEAURL(location);
//sendData.sendMessage(sentence);
int geozoneLocation = GeoZone.getGeozoneLocation(location);
switch(geozoneLocation)
{
case GeoZone.LEVEL_ONE:
sendMessage = false;
if(Constants.LEVEL_ONE_INTERVAL != currentInterval)
{
startLocationUpdates(Constants.LEVEL_ONE_INTERVAL, LocationManager.NETWORK_PROVIDER);
}
break;
case GeoZone.LEVEL_TWO:
sendMessage = false;
if(Constants.LEVEL_ONE_INTERVAL != currentInterval)
{
startLocationUpdates(Constants.LEVEL_TWO_INTERVAL, LocationManager.NETWORK_PROVIDER);
}
break;
case GeoZone.LEVEL_THREE:
sendMessage = false;
if(Constants.LEVEL_ONE_INTERVAL != currentInterval)
{
startLocationUpdates(Constants.LEVEL_THREE_INTERVAL, LocationManager.NETWORK_PROVIDER);
}
break;
case GeoZone.LEVEL_FOUR:
sendMessage = true;
if(Constants.LEVEL_ONE_INTERVAL != currentInterval)
{
startLocationUpdates(Constants.LEVEL_FOUR_INTERVAL, LocationManager.GPS_PROVIDER);
}
break;
}
if(sendMessage)
{
sendData.sendMessage(sentence);
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onProviderDisabled(String provider)
{
}
};
}
....
}
我的服务类在下面调用。
public class TelematicsIntent extends Service
{
public TelematicsIntent()
{
}
@Override
public IBinder onBind(Intent intent)
{
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate()
{
GetLocation location = new GetLocation(this, Constants.HOST_NAME);
}
@Override
public void onDestroy()
{
}
}
此Service类由MainActivity类调用。我知道正确调用了GetLocation类,因为我在中设置了一个断点
this.host = hostParam
并且代码停在那里,但我在语句int geozoneLocation = GeoZone.getGeozoneLocation(location);
中添加了另一个断点,其中GeoZone类是另一个只通过位置数据的类,并返回该位置是否在特定区域内。有什么想法吗?
答案 0 :(得分:0)
我弄清楚为什么没有被召唤。我忘了实际启动位置服务,因为我无法在代码中实际启动它们。我应该早点看到这个,但我想我没有。