在Android中使用GPS作为服务

时间:2014-11-14 02:51:17

标签: android gps

因此,我正在制作一个使用GPS跟踪您的位置的地图应用。我们刚上过一堂关于使用GPS作为服务的课程。它看起来很有趣,所以我试一试。

所以我已经制作了使用GPS作为服务的代码。但我不确定如何让我的当前位置显示在地图上。目前我有我的活动实现LocationListener并且我正在使用onLocationChanged采取的路线更新地图。

我在想的是将gps作为服务,但也让我的活动实现了locationListener。因此,如果屏幕被锁定,则服务仍将记录坐标,但是当活动正在运行时,可以通过那里更新地图。我只是想知道是否有更好的方法或者是否可以让服务和活动都实现LocationListener?

感谢。

1 个答案:

答案 0 :(得分:1)

您无法直接在服务中标记标记或将路径放入您的活动中......

因此,最好使用位置监听器实现服务和活动 ......

您可以根据需要跟踪服务中的位置并将其存储在变量(可能是JSON数组,字符串数组等...)中,并将数组存储在首选项中档案......

解锁设备后,您的活动将重新启动,您可以从您的偏好中获取数组变量,并可以在您的活动中绘制路线......

你可以这样实现......

服务类......

private JSONArray savedTrekLat = new JSONArray();
private JSONArray savedTrekLon = new JSONArray();

@Override
public void onLocationChanged(Location location) {
    double lat = location.getLatitude();
    double lon = location.getLongitude();
    savedTrekLat.put(Double.toString(lat));
    savedTrekLon.put(Double.toString(lon));
    edit = mPrefer.edit();
    edit.putString("SAVED_TREK_LAT", savedTrekLat.toString());
    edit.putString("SAVED_TREK_LON", savedTrekLon.toString());
    edit.commit();
}

您的活动课程......

private static SharedPreferences mPrefer;
private String mTrekedLat;
private String mTrekedLon;
private JSONArray trekedlat;
private JSONArray trekedlon;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map_tile);
        mPrefer = getSharedPreferences("Your Preference Name", this.MODE_PRIVATE);
        mTrekedLat = mPrefer.getString("SAVED_TREK_LAT", null);
        mTrekedLon = mPrefer.getString("SAVED_TREK_LON", null);
        try {
            trekedlat = new JSONArray(mTrekedLat);
            trekedlon = new JSONArray(mTrekedLon);
        } catch (Exception e) {
            e.printStackTrace();
        }
}

在此之后,您将获得移动设备在睡眠状态下所经历的位置,并且您可以通过从 JSON数组中提取值来使用您的代码将路径放入活动中...