基本信息
源码名称:android程序的自动更新和基于GPS定位的轨迹存储源码
源码大小:1.43M
文件格式:.zip
开发语言:Java
更新时间:2016-01-08
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
android程序的自动更新和基于GPS定位的轨迹存储源码

package com.epgis.packmanage.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

/**
 * @author bai GPS轨迹管理,处理所有轨迹管理逻辑业务
 * */
public class GPSTrackManager {
protected static final String TAG = "GPSTrackManager";
/**
* 指定SDcard中的文件位置,输入时请带上后缀名TXT。
* */
public String trackFileName = "gpsTrack.txt";
/**
* 是否开启定位开关
* */
public boolean isOpenTrack = true;
/**
* 存储和读取轨迹管理在Sdcard中的文件位置
* */
private String gpsTrackPath = "mnt/sdcard/epgis/data/" trackFileName;
/**
* 是否开始录制轨迹
* */
private boolean isStartTrack;
/**
* 轨迹录制时获取的地理信息
* */
private ArrayList<Location> locations;
/**
* android.location.LocationManager;
* */
private LocationManager locationManager;

private Context context;
/**
* 获取GPS信息
* */
public GPSTrackManager(Context context) {
this.context = context;
locationManager = (LocationManager)this.context.getSystemService(Context.LOCATION_SERVICE);
locations = new ArrayList<Location>();
}
/**
* 轨迹录制
* */
public boolean tracklocations() {
//判断开关是否开启
if (!isOpenTrack) {          
return false;
}
//判断GPS是否正常启动        
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(context, "请开启GPS导航...", Toast.LENGTH_SHORT).show();           
return false;        
}
isStartTrack = true;
// 设置监听器,自动更新的最小时间为间隔N秒或最小位移变化超过N米
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1 * 1000, 0,locationListener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1 * 1000, 0,locationListener);
return true;
}

/**
* 存储 获取的轨迹地理信息,轨迹停止录制时调用
* */
public boolean saveLocations() {
//判断开关是否开启
if (!isOpenTrack) {          
return false;
}
isStartTrack = false;
if (createFile()) {
if(locations == null || locations.size() == 0){
Toast.makeText(context, "没有获取有效的位置...", Toast.LENGTH_SHORT).show();
return false;
}
FileWriter writer;
try {
writer = new FileWriter(gpsTrackPath,true);
String positions = "";
for (int i = 0; i < locations.size(); i ) {
positions = locations.get(i).getLongitude() " " locations.get(i).getLatitude() ",";
}
if(positions.length() > 0){
positions = positions.substring(0, positions.length()-1);
}
String content = "name:" defineFileName() " position:" positions "\n";
writer.write(content);
writer.close();
locations.clear();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return true;
}
/**
* 返回轨迹记录列表
* @return ArrayList<HashMap<String,Object>>
* ArrayList 每条对应文件中的一条数据
* HashMap{name:String,position:ArrayList<Location>}
* */
public ArrayList<HashMap<String, Object>> getTrackList() {
//判断开关是否开启
if (!isOpenTrack) {          
return null;
}
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
File file = new File(gpsTrackPath);
if(file.isFile() && file.exists()){
try {
String encoding = "GBK";
InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);
BufferedReader bufferedReader = new BufferedReader(read);
String lineText = "";
while ((lineText = bufferedReader.readLine())!=null) {
int pos = lineText.indexOf("position");
String name = lineText.substring(5,pos-1);
String position = lineText.substring(pos 9, lineText.length());
String[] positions = position.split(",");
ArrayList<Location> templist = new ArrayList<Location>();
for (String str : positions) {
String[] temp = str.split(" ");
Location loc = new Location("");
loc.setLongitude(Double.valueOf(temp[0]));
loc.setLatitude(Double.valueOf(temp[1]));
templist.add(loc);
}
HashMap<String, Object> hMap = new HashMap<String, Object>();
hMap.put("name", name);
hMap.put("position", templist);
list.add(hMap);
}
read.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
return list;
}
/**
* 检查存储文件在sdCard中是否存在并创建
* */
private  boolean createFile(){
File file = new File(gpsTrackPath);
if(file.exists() == false){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
return true;
}
/**
* 存储时定义存储文件名
* */
private String  defineFileName() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
return sdf.format(new Date());
}
/**
* 位置监听
* */
private LocationListener locationListener=new LocationListener() {                
/**         
* * 位置信息变化时触发         
* */
@Override
public void onLocationChanged(Location location) {
if (!isStartTrack) {
locationManager.removeUpdates(this);
Toast.makeText(context, "轨迹定位已经取消...", Toast.LENGTH_SHORT).show();
}else {
if(location != null){
locations.add(location);
Toast.makeText(context, "轨迹定位中...", Toast.LENGTH_SHORT).show();
}
}
}                
/**         
* * GPS状态变化时触发         
* */   
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {            
switch (status) {            
//GPS状态为可见时            
case LocationProvider.AVAILABLE:                
Log.i(TAG, "当前GPS状态为可见状态");                
break;            
//GPS状态为服务区外时            
case LocationProvider.OUT_OF_SERVICE:                
Log.i(TAG, "当前GPS状态为服务区外状态");                
break;            
//GPS状态为暂停服务时            
case LocationProvider.TEMPORARILY_UNAVAILABLE:                
Log.i(TAG, "当前GPS状态为暂停服务状态");                
break;            
}        
}            
/**         
* * GPS开启时触发         
* */   
@Override
public void onProviderEnabled(String provider) {     
}            
/**         
* * GPS禁用时触发         
* */ 
@Override
public void onProviderDisabled(String provider) {       
}        
};
}