5

我的问题是,我的服务已经实现了 LocationListener,似乎每 500 毫秒接收一次 GPS 更新。无论我在 requestLocationUpdates 函数中放入多少 minTime。

我的一段代码:

public class LocationService extends Service implements LocationListener {

    LocationManager locMan;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
        locMan.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER;
        locMan.requestLocationUpdates( LocationManager.GPS_PROVIDER, 60000, 1, this); 

    }

    public void onLocationChanged(Location location) {
        Log.d( "Loc", "Location has been changed" );
    }
}

从我的主要活动中的一个按钮,我将调用 startService() ,之后它应该在后台运行,但它会提供持续更新。

4

1 回答 1

2

我看到你的情况有一些问题:

GPS 的准确度最好在 3 米左右,这是在最佳条件下。因此,如果位置变化 1 米,则请求更新是没有意义的。实际上,当设备静止不动时,GPS 噪音很容易表明运动。我的建议是让 minDistance 至少为 10。

我不明白你为什么要调用 isProviderEnabled() 因为你没有对返回的值做任何事情。

你说在 startService() 之后事情应该在后台运行,但事实并非如此。除非您为其创建某种后台线程,否则服务不会在后台运行。这个答案有太多要解释的内容来解释服务是如何工作的。上网阅读,或者找一本关于 Android 开发的好书。

于 2011-08-09T01:58:59.993 回答