android以后台service的方式获取GPRS数据
2012-09-07 14:48
288 查看
在配备Android系统的手机中,一般都配备了GPS设备。Android为我们获取GPS数据提供了很好的接口。本文来说一下如何使用Android获取GPS的经纬度。
1 从Service继承一个类。
2 创建startService()方法。
3 创建endService()方法 重载onCreate方法和onDestroy方法,并在这两个方法里面来调用startService以及endService。
4 在startService中,通过getSystemService方法获取Context.LOCATION_SERVICE。
5 基于LocationListener实现一个新类。默认将重载四个方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。对于onLocationChanged方法是我们更新最新的GPS数据的方法。一般我们的操作都只需要在这里进行处理。
6 调用LocationManager的requestLocationUpdates方法,来定期触发获取GPS数据即可。在onLocationChanged函数里面可以实现我们对得到的经纬度的最终操作。
7 最后在我们的Activity里面通过按钮来启动Service,停止Service。
示意代码如下:
原文地址:http://www.189works.com/article-34133-1.html
1 从Service继承一个类。
2 创建startService()方法。
3 创建endService()方法 重载onCreate方法和onDestroy方法,并在这两个方法里面来调用startService以及endService。
4 在startService中,通过getSystemService方法获取Context.LOCATION_SERVICE。
5 基于LocationListener实现一个新类。默认将重载四个方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。对于onLocationChanged方法是我们更新最新的GPS数据的方法。一般我们的操作都只需要在这里进行处理。
6 调用LocationManager的requestLocationUpdates方法,来定期触发获取GPS数据即可。在onLocationChanged函数里面可以实现我们对得到的经纬度的最终操作。
7 最后在我们的Activity里面通过按钮来启动Service,停止Service。
示意代码如下:
package com.jouhu.gpsservice; import android.app.Service; import android.content.Context; import android.content.Intent; import android.location.LocationListener; import android.location.LocationManager; import android.os.Binder; import android.os.IBinder; import android.util.Log; public class GPSService extends Service { //2000ms private static final long minTime = 2000; //最小变更距离 10m private static final float minDistance = 10; String tag = this.toString(); private LocationManager locationManager; private LocationListener locationListener; private final IBinder mBinder = new GPSServiceBinder(); public void startService() { locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); locationListener = new GPSServiceListener(); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, locationListener); } public void endService() { if(locationManager != null && locationListener != null) { locationManager.removeUpdates(locationListener); } } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return mBinder; } @Override public void onCreate() { // startService(); Log.v(tag, "GPSService Started."); } @Override public void onDestroy() { endService(); Log.v(tag, "GPSService Ended."); } public class GPSServiceBinder extends Binder { GPSService getService() { return GPSService.this; } } }GPRSServiceListener的实现:
package com.jouhu.gpsservice; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.TimeZone; import android.location.Location; import android.location.LocationListener; import android.location.LocationProvider; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class GPSServiceListener implements LocationListener { private static final String tag = "GPSServiceListener"; private static final float minAccuracyMeters = 35; private static final String hostUrl = "http://doandroid.info/gpsservice/position.php?"; private static final String user = "huzhangyou"; private static final String pass = "123456"; private static final int duration = 10; private final DateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss"); public int GPSCurrentStatus; @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub if(location != null) { if (location.hasAccuracy() && location.getAccuracy() <= minAccuracyMeters) { //获取时间参数,将时间一并Post到服务器端 GregorianCalendar greg = new GregorianCalendar(); TimeZone tz = greg.getTimeZone(); int offset = tz.getOffset(System.currentTimeMillis()); greg.add(Calendar.SECOND, (offset/1000) * -1); StringBuffer strBuffer = new StringBuffer(); strBuffer.append(hostUrl); strBuffer.append("user="); strBuffer.append(user); strBuffer.append("&pass="); strBuffer.append(pass); strBuffer.append("&Latitude="); strBuffer.append(location.getLatitude()); strBuffer.append("&Longitude="); strBuffer.append(location.getLongitude()); strBuffer.append("&Time="); strBuffer.append(timestampFormat.format(greg.getTime())); strBuffer.append("&Speed="); strBuffer.append(location.hasSpeed()); doGet(strBuffer.toString()); Log.v(tag, strBuffer.toString()); } } } //将数据通过get的方式发送到服务器,服务器可以根据这个数据进行跟踪用户的行走状态 private void doGet(String string) { // TODO Auto-generated method stub // } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub GPSCurrentStatus = status; } }
原文地址:http://www.189works.com/article-34133-1.html
相关文章推荐
- Android以后台Service的方式获取GPS数据,并定时发送到服务器
- Android如何以后台Service的方式获取GPS数据
- Android Service生命周期,本地服务远程服务,前台服务后台服务,启动方式,与IntentService区别全面解析
- android 音乐播放 启动方式 (1)利用内部类绑定service传送数据,只适用于单activity
- Android Service后台多线程压缩并提交图片及数据
- android之HTTP请求后台数据,GSON解析数据,异步获取数据
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- android手机如何获取某APP的页面耗时数据(命令行方式)
- SQL Server获取数据添加符号,截取方式,主要用于后台Dictionary比较
- Android两种方式获取网络数据
- android获取网页数据的几种方式
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- Android应用获取后台基于SSH框架开发的接口数据
- 【Android】使用http的Post和Get方式获取网络数据
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例
- Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比
- android采用post方式获取服务器数据
- Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据
- springmvc后台获取表单提交的数据方式