因此,我正在制作一个使用GPS跟踪您的位置的地图应用。我们刚上过一堂关于使用GPS作为服务的课程。它看起来很有趣,所以我试一试。
所以我已经制作了使用GPS作为服务的代码。但我不确定如何让我的当前位置显示在地图上。目前我有我的活动实现LocationListener并且我正在使用onLocationChanged采取的路线更新地图。
我在想的是将gps作为服务,但也让我的活动实现了locationListener。因此,如果屏幕被锁定,则服务仍将记录坐标,但是当活动正在运行时,可以通过那里更新地图。我只是想知道是否有更好的方法或者是否可以让服务和活动都实现LocationListener?
感谢。
答案 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数组中提取值来使用您的代码将路径放入活动中...