Android wiki :17.GPS服务

//开启服务在后台获得gps坐标,想要的时候数据的时候,开启这个服务,将坐标保存到xml配置文件中,然后取出来即可

public class GPSService extends Service {
	// 用到位置服务
	private LocationManager lm;
	private MyLocationListener listener;

	public void onCreate() {
		super.onCreate();
		lm = (LocationManager) getSystemService(LOCATION_SERVICE);//得到位置服务

		listener = new MyLocationListener();
		// 注册监听位置服务
		// 给位置提供者设置条件
		Criteria criteria = new Criteria();
		criteria.setAccuracy(Criteria.ACCURACY_FINE);

		// 设置参数细化:
		// criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
		// criteria.setAltitudeRequired(false);//不要求海拔信息
		// criteria.setBearingRequired(false);//不要求方位信息
		// criteria.setCostAllowed(true);//是否允许付费
		// criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求

		String proveder = lm.getBestProvider(criteria, true);//得到当前可用的最好定位服务名称
		lm.requestLocationUpdates(proveder, 0, 0, listener);//注册监听位置服务
	}

	class MyLocationListener implements LocationListener {
		/**
		 * 当位置改变的时候回调
		 */
		public void onLocationChanged(Location location) {

			String longitude = "j:" + location.getLongitude() + "\n";//得到经度
			String latitude = "w:" + location.getLatitude() + "\n";//纬度
			String accuracy = "a" + location.getAccuracy() + "\n";//精确度
			// 发短信给安全号码

			// 把标准的GPS坐标转换成火星坐标(地图上的坐标是由标准的坐标通过算法算出火星坐标的,所以真实gps坐标在地图上显示偏差好大)
			//所以把标准的gps坐标转换成火星坐标,再在地图上显示就准确了。
//			InputStream is;
//			try {
//				is = getAssets().open("axisoffset.dat");
//				ModifyOffset offset = ModifyOffset.getInstance(is);

										//将标准的坐标点传入转换成火星坐标
//				PointDouble double1 = offset.s2c(new PointDouble(location.getLongitude(), location.getLatitude()));
//				longitude ="j:" + offset.X+ "\n";
//				latitude =  "w:" +offset.Y+ "\n";
//
//			} catch (Exception e) {
//				e.printStackTrace();
//			}finlly{
				is.close();
			}

			//将坐标保存到xml配置文件中
			SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
			Editor editor = sp.edit();
			editor.putString("lastlocation", longitude + latitude + accuracy);
			editor.commit();

		}

		/**
		 * 当状态发生改变的时候回调 开启--关闭 ;关闭--开启
		 */
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub

		}

		/**
		 * 某一个位置提供者可以使用了
		 */
		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub

		}

		/**
		 * 某一个位置提供者不可以使用了
		 */
		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub

		}

	}

	public void onDestroy() {
		super.onDestroy();
		// 取消监听位置服务
		lm.removeUpdates(listener);
		listener = null;
	}

}

需要的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 17:28:41

Android wiki :17.GPS服务的相关文章

Xamarin.Android其他类型的服务

一.前言 前面我们已经学了关于服务的很多知识,但是对于真实的开发那些远远不够,通过这节我们将学习其他类型的服务,比如前台服务.IntentService和消息服务.下面我们开始进入正题. 二.前台服务 顾名思义,就是拥有前台的优先等级.当然服务还是不可见的.因为前面我们介绍过Android系统会在低内存的情况下将一些长时间不用的应用关闭,如果还是不够,那么就会通过关闭服务服务来达到目的,然而对于某些应用而言,这样将会影响用户的正常使用.比如听音乐,我们基本上都会打开应用选择歌曲后将应用置为后台.

Android开发-API指南-服务

Service 英文原文:http://developer.android.com/guide/components/services.html 采集(更新)日期:2014-12-23 原博客:http://blog.sina.com.cn/s/blog_48d49130010102pn.html 在本文中 概述 在manifest中声明服务 创建一个started服务 扩展IntentService类 扩展Service类 启动一个服务 终止一个服务 创建一个bound服务 向用户发送通知 在

Android应用程序绑定服务(bindService)的过程源代码分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6745181 Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部 启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部绑定Service的过程,这是一种在应用程序进程内部启动 Service的方法. 在前面一篇文章Android进程间通信(IPC)机

Android的软件包管理服务PackageManagerService源码分析

Android系统下的apk程序都是通过名为PackageManagerService的包管理服务来管理的.PacketManagerService是安卓系统的一个重要服务,由SystemServer启动,主要实现apk程序包的解析,安装,更新,移动,卸载等服务.不管是系统apk(/system/app),还是我们手工安装上去的,系统所有的apk都是由其管理的. 以android 4.0.4的源码为例,android4.0.4/frameworks/base/services/java/com/

Android客户端与PHP服务端通信(二)

概述 本节通过一个简单的demo程序简单的介绍Android客户端通过JSON向PHP服务端提交订单,PHP服务端处理订单后,通过JSON返回结果给Android客户端.正常来讲,PHP服务端在处理订单过程中,需要与MySQL数据库交互,这里为了简单起见,暂时省掉MySQL. 通信格式 首先,需要定下客户端与服务端之间通信格式,如下表 Android客户端 客户端与服务端采用JSON数据格式通信,同时采用HTTP通信协议交互,采用POST方式提交结果.同时还要注意一点,与WEB服务器通信的过程需

Android技术17:Android应用程序中执行二进制命令

Android系统底层为Liunx内核,内核中有大量的可执行的二进制文件,system/bin目录下面,如下图 我们都知道在Linux命令窗口中可以执行上述命令,但是在Android应用程序中是如何调用该命令呢? 1.获取当前Runtime Runtime.getRuntime(); 2.执行命令 例如执行ps 查看进程信息 Process precess=Runtime.getRuntime().exec("ps"); 3.获取内容 InputStream is=precess.ge

【Android】17.5 利用Messenger实现进程间通信(IPC)

分类:C#.Android.VS2015: 创建日期:2016-03-03 一.Messager类简介 本章前面曾经说过,要在Android上执行带服务的进程间通信(IPC),既可以用Messenger类来实现,也可以用更高级的AIDL技术来实现(AIDL:Android接口定义语言). 这一节我们学习首选的方案:用Messenger实现IPC的基本设计思路. IPC:进程间通信(Inter-process Communication). IPC with Service:带服务的进程间通信.

Android中使用HTTP服务

转至 http://blog.csdn.net/liuhe688/article/details/6425225 在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附带了Apache的HttpClient API.Apache HttpClient是一个完善的HTTP客户端,它提供了对HTTP协议的全面支持,可以使用HTTP GET和POST进行访问.下面我们就结合实例,介绍一下HttpClient的使用方法. 我

Android客户端与PHP服务端通信(四)---极光推送示例工程分析

概述 上一节,描述了注册极光推送并使用其例子的方法,这一节准备研究一下示例工程的框架,为移植它做准备. 分析例程源码 首先分析一下例程的源码结构,建议对照着JPUSH的官方文档(http://docs.jpush.io/)分析,我就是这样做的. 注册应用后,下载的示例工程结构如下, ExampleApplication.java:该类为应用程序定制了一个Application类,因为调用JPush的SDK时,需要调用JPush提供的init()函数API,而按照官方文档的说明"init 只需要在