package com.zjl.location;
import java.util.Timer;
import java.util.TimerTask;
import org.json.JSONObject;
import android.app.Activity;
import android.app.Application;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.baidu.location.LocServiceMode;
import com.baidu.location.LocationChangedListener;
import com.baidu.location.LocationClient;
import com.baidu.location.ReceiveListener;
//定时器定位类
public class locationApplicationBean extends Application {
//错误标记
private static String TAG ="locationApplicationBeanError";
//时间间隔
private static int myTime = 5*1000 ;
private LocationClient mLocationClient = null; //定位类
private String mData; //获取的数据
//定位时间间隔
private int myLocationTime = 5*1000;
//是否启动了定位API
private boolean isOpenLocation = false;
//是否启动了定位线程
private boolean isOpenLocationTask = false;
//经纬度
private double jingweidu[] = new double[2];
@Override
public void onCreate() {
mLocationClient = new LocationClient(this);
}
//获取到经纬的回调操作
private void logMsg(String str) {
try {
mData = str.trim();
/**
* {
* "result":{
* "time":"2011-10-11 17:06:07","error":"161"},
* "content":{
* "point":{"x":"117.13045277196","y":"39.104208211327"},
* "radius":"130",
* "addr":{"street_number":"206号"}
* }
* }
* }
*/
Log.i(TAG, "进入了定位 定时器 更新了经纬度方法 -- 信息:"+ mData);
//解析经纬度
JSONObject jsonObject = new JSONObject(mData) ;
JSONObject jsonjingweidu = jsonObject.getJSONObject("content").getJSONObject("point");
String longitude =jsonjingweidu.getString("y");
String latitude =jsonjingweidu.getString("x");
jingweidu= new double[]{stringToDouble(longitude),stringToDouble(latitude)};
Log.i(TAG, "longitude :"+jingweidu[0] +"latitude : "+jingweidu[1]);
int r = setLocalJingweidu(); //经纬度保存到本地
if(r==1)
{
double[] temp = getLocalJingweidu();
Log.i(TAG, "保存经纬度到本地成功 ,经度:"+temp[0]+"纬度:"+temp[1]);
}else
{
Log.i(TAG, "保存经纬度到本地失败");
}
} catch (Exception e) {
Log.i(TAG, "更新操作异常"+e.toString());
}
}
/***
* 将 string 转换成 double 类型
* @param str
* @return
*/
private double stringToDouble(String str)
{
double v = 0.0;
try {
if(str!=null&&!str.trim().equals(""))
{
v = Double.parseDouble(str.trim());
}
} catch (NumberFormatException e) {
Log.i(TAG, "string转换成double 失败 ");
}
return v;
}
//位置发生改变
private class MyLocationChangedListener implements LocationChangedListener {
@Override
public void onLocationChanged() {
//logMsg("LocationChangedListener: ");
}
}
//接受定位得到的消息
private class MyReceiveListenner implements ReceiveListener {
@Override
public void onReceive(String strData) {
logMsg(strData); //调用回调函数
}
}
/**
* start定位
*/
private void startLocation()
{
try {
if(!isOpenLocation) //如果没有打开
{
mLocationClient.setCoorType("bd09ll"); //设置返回的坐标类型
mLocationClient.setTimeSpan(myLocationTime); //设置时间
mLocationClient.setAddrType("street_number"); //返回地址类型
mLocationClient.setServiceMode(LocServiceMode.Immediat); //定位方式为:即时定位
mLocationClient.addRecerveListener(new MyReceiveListenner());
mLocationClient.start(); //打开定位
isOpenLocation = true; //标识为已经打开了定位
}
} catch (Exception e) {
Log.i(TAG, "打开定位异常"+e.toString());
}
}
/**
* end 定位
*/
private void closeLocation()
{
try {
mLocationClient.stop(); //结束定位
isOpenLocation = false; //标识为已经结束了定位
} catch (Exception e) {
Log.i(TAG, "结束定位异常"+e.toString());
}
}
/***
* 定时器的回调函数
*/
private Handler handler = new Handler() {
//更新的操作
@Override
public void handleMessage(Message msg) {
getLocationInfo(); //获取经纬度
Log.i(TAG,"调用了获取经纬度方法");
super.handleMessage(msg);
}
};
//定时器
private Timer myLocationTimer = null;
//定时线程
private TimerTask myLocationTimerTask = null;
/***
* 初始化定时器
*/
private void initLocationTime()
{
if(myLocationTimer==null)
{
Log.i(TAG, "myLocationTimer 已经被清空了");
myLocationTimer = new Timer();
}else
{
Log.i(TAG, "myLocationTimer 已经存在");
}
}
/***
* 初始化 定时器线程
*/
private void initLocationTimeTask()
{
myLocationTimerTask = new TimerTask() {
/***
* 定时器线程方法
*/
@Override
public void run() {
handler.sendEmptyMessage(1); //发送消息
}
};
}
/***
* 初始化 time 对象 和 timetask 对象
*/
private void initLocationTimeAndTimeTask()
{
initLocationTime();
initLocationTimeTask();
}
/***
* 销毁 time 对象 和 timetask 对象
*/
private void destroyLocationTimeAndTimeTask()
{
myLocationTimer = null;
myLocationTimerTask = null;
}
/***
* 打开定位定时器线程
*/
public void openLocationTask()
{
try {
if(!isOpenLocationTask) ///如果不是打开状态,则打开线程
{
startLocation();//启动定位更新经纬度
//开启定时器
initLocationTimeAndTimeTask(); //初始化定时器和定时线程
myLocationTimer.schedule(myLocationTimerTask, myTime, myTime);
Log.i(TAG, " 打开了定位定时器线程 ");
isOpenLocationTask = true; //标记为打开了定时线程
}else
{
Log.i(TAG, " 已经开启了定位定时器线程 ");
}
} catch (Exception e) {
Log.i(TAG, "打开定位定时器线程 异常"+e.toString());
}
}
/***
* 获取经纬度
*/
public void getLocationInfo()
{
/**
* 0:正常。
1:SDK还未启动。
2:没有监听函数。
6:请求间隔过短。
*/
int i = mLocationClient.getLocation();
String TAGfont = "getLocationInfo() : ";
switch(i)
{
case 0:
Log.i(TAG, TAGfont+"正常。");
break;
case 1:
Log.i(TAG, TAGfont+"SDK还未启动。");
break;
case 2:
Log.i(TAG, TAGfont+"没有监听函数。 ");
break;
case 6:
Log.i(TAG, TAGfont+"请求间隔过短。 ");
break;
default:
Log.i(TAG, TAGfont+"其他原因 ");
}
}
/***
* 关闭定位定时器线程
*/
public void closeLocationTask()
{
try {
if(isOpenLocationTask) //如果是打开状态,则关闭
{
closeLocation();
//关闭定时器
myLocationTimer.cancel();
destroyLocationTimeAndTimeTask();
Log.i(TAG, " 关闭了定位定时器线程 ");
isOpenLocationTask = false; //标记为关闭了定时线程
}else
{
Log.i(TAG, " 已经关闭了定位定时器线程 ");
}
} catch (Exception e) {
Log.i(TAG, "关闭定位定时器线程异常: "+e.toString());
}
}
/***
* 将经纬度保存在本地
* @return
*/
private int setLocalJingweidu()
{
int r = 0;
try {
//获取活动的 preferences 对象
SharedPreferences usersetting = getApplicationContext().getSharedPreferences("test",Activity.MODE_PRIVATE);
//获取编辑对象
Editor userinfoeditor = usersetting.edit();
userinfoeditor.putString("Location_longitude", jingweidu[0]+"");//经度
userinfoeditor.putString("Location_latitude", jingweidu[1]+""); //纬度
userinfoeditor.commit();
return 1;
} catch (Exception e) {
Log.i(TAG," 保存经纬度,到本地失败"+e.toString());
r = 0;
}
return r;
}
/***
* 获取本地的经纬度
* @return
*/
private double[] getLocalJingweidu()
{
double[] jinweidu = new double[]{0,0};
try {
//获取活动的 preferences 对象
SharedPreferences usersetting = getApplicationContext().getSharedPreferences("test",Activity.MODE_PRIVATE);
double longitude
没有合适的资源?快使用搜索试试~ 我知道了~
android 定时定位 (用的是百度地图定位)
共31个文件
class:14个
java:3个
png:3个
3星 · 超过75%的资源 需积分: 50 132 下载量 48 浏览量
2011-11-12
16:45:10
上传
评论 3
收藏 98KB RAR 举报
温馨提示
该项目是一个定时定位的示例,调用的是百度地图定位API,能够很好的解决定位问题,并且可以进行参数设置来获取到自己需要的定位信息,很不错哦!欢迎下载交流
资源推荐
资源详情
资源评论
收起资源包目录
MyLocationTimeTask.rar (31个子文件)
MyLocationTimeTask
bin
classes.dex 36KB
MyLocationTimeTask.apk 29KB
com
zjl
location
locationApplicationBean$2.class 824B
R$layout.class 388B
R$id.class 443B
R$drawable.class 394B
locationApplicationBean$MyLocationChangedListener.class 737B
mainActivity.class 1KB
locationApplicationBean$MyReceiveListenner.class 1KB
R$attr.class 334B
R.class 517B
locationApplicationBean.class 8KB
locationApplicationBean$1.class 935B
mainActivity$1.class 908B
R$string.class 421B
mainActivity$2.class 909B
resources.ap_ 11KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
values
strings.xml 178B
drawable-mdpi
icon.png 3KB
layout
main.xml 1KB
assets
default.properties 362B
gen
com
zjl
location
R.java 842B
proguard.cfg 1KB
src
com
zjl
location
mainActivity.java 1KB
locationApplicationBean.java 8KB
.project 854B
.classpath 333B
lib
locSDk.jar 21KB
AndroidManifest.xml 1KB
共 31 条
- 1
wypdff
- 粉丝: 0
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页