在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android程序的自动更新和基于GPS定位的轨迹存储源码

android程序的自动更新和基于GPS定位的轨迹存储源码

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:1.43M
  • 下载次数:39
  • 浏览次数:377
  • 发布时间:2016-01-08
  • 实例类别:Android平台开发
  • 发 布 人:酷酷的昵称
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Android GPS 定位 源码 d

实例介绍

【实例简介】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) {       
}        
};
}


标签: Android GPS 定位 源码 d

实例下载地址

android程序的自动更新和基于GPS定位的轨迹存储源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警