【问题标题】:Create a Service that gets GPS coordinates and sends them to server创建一个获取 GPS 坐标并将它们发送到服务器的服务
【发布时间】:2015-10-14 19:39:09
【问题描述】:

我正在开发一个原型 Android 应用程序,它将 gps 数据发送到服务器。当我直接从我的 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 类是另一个类,它只遍历位置数据并返回该位置是否在特定区域内。有什么想法吗?

【问题讨论】:

  • 你为什么不用陀螺仪或加速器?
  • 我真的不需要任何加速度或方向信息。当我在我正在做的另一次尝试中让它工作时,我能够从 Location 对象中获得我需要的东西。
  • 好的,理解这一点,LocationListener 的函数永远不会在您的应用程序处于后台甚至用户在界面中时被调用?
  • 正确。 LocationListener 的函数永远不会被调用。而且,我在 logcat 中没有收到任何类型的错误。而且我更愿意让事情尽可能分开,所以我不想在 MainActivity 中实现 LocationListener。

标签: java android gps locationmanager locationlistener


【解决方案1】:

我知道为什么它没有被调用。我忘了实际启动定位服务,因为我无法在代码中让它们实际启动。我应该早点看到这个,但我想我没有。

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多