0

全部-我有一个运动追踪器应用程序,其中我有一个service正在运行的秒表,因此用户的设备可以进入睡眠状态,而无需秒表停止。我还想Map在我的应用程序中包含一个选项卡,以便用户可以看到他们去了哪里。我尝试使用主要活动来完成此操作,并且效果很好,但是每次手机进入睡眠状态时,主要活动都会退出,并随之拉下地图。这在 GPS 中造成了间隙,无法跟踪速度或距离。因此,我尝试将地图放入我的服务中,但遇到了诸如我的服务必须扩展MapActivity(但也必须扩展Service)之类的问题。这是我尝试过的:

public class KeepGoing extends Service { //But also has to extend MapView?  
MapView mapView = null;
MapController mapController = null;
MyLocationOverlay whereAmI = null;

protected boolean isLocationDisplayed() {
    return whereAmI.isMyLocationEnabled();
}

protected boolean isRouteDisplayed() {
    return false;
}

还:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {      
    start();        
    return(START_NOT_STICKY);       
}   

private void start() {

    mHandler.sendEmptyMessage(MSG_START_TIMER);

    LayoutInflater inflater = ( LayoutInflater ) getSystemService( LAYOUT_INFLATER_SERVICE );
    View layout = inflater.inflate( R.layout.activity_main , null );

    mapView = (MapView) layout.findViewById(R.id.mapview);  

    mapView.setBuiltInZoomControls(true);

    mapController = mapView.getController();
    mapController.setZoom(15);

    whereAmI = new MyLocationOverlay(this, mapView);
    mapView.getOverlays().add(whereAmI);
    mapView.postInvalidate(); }

我的方法中没有任何与地图相关的代码onDestroy我的问题是:如何将 amapView放入服务中,以便它即使在设备处于睡眠状态时也能运行和/或是否有另一种/更好的方法来完成此操作? 感谢您的时间和精力!

4

3 回答 3

0

如果要获取用户去过的坐标,可以使用Location Manager

于 2012-08-15T22:05:10.963 回答
0

运行秒表的服务,因此用户的设备可以在没有秒表停止的情况下进入睡眠状态

当设备进入睡眠状态时,秒表肯定会“停止”,因为 CPU 断电并且您的代码停止运行。唯一不会发生的方法是如果您使用WakeLock.

话虽如此,您不需要让设备运行来跟踪时间。

这在 GPS 中造成了间隙,无法跟踪速度或距离

欢迎您使用LocationManager来获取自己的 GPS 定位。但是,“GPS 中的间隙”并不意味着“无法跟踪速度或距离”,主要是因为您总是有间隙。间隔是毫秒还是千年肯定会有所不同,但您计算距离和速度的方式相同:距离是通过比较两个 GPS 定位点的位置来确定的,速度是距离除以经过的时间。

如何将 mapView 放入服务中,以便即使设备处于睡眠状态也能运行

你不能。

和/或是否有另一种/更好的方法来实现这一点?

重新设计您的应用程序以更好地处理设备入睡的情况,或者不允许设备入睡(例如,android:keepScreenOn="true"在您的应用程序中MapView,或用于确定位置PARTIAL_WAKE_LOCK的您Service的应用程序中)。LocationManager

于 2012-08-15T22:06:35.820 回答
0

而不是试图让地图视图在您的服务中运行(不要忘记将在现有活动中运行的地图视图),您应该使用LocationManager并存储用户访问的点(通过使用 LocationManager 中的requestLocationUpdate方法找到) 在 ArrayList 或类似的数据结构中,然后您所要做的就是使用这个点列表来显示用户访问过的地方。

于 2012-08-15T22:08:33.650 回答